[英]How to structure python project for use with coverage.py?
我有一個具有以下布局的軟件包:
tiny-py-interpreter/
|-- setup.py
|-- .coveragerc
|-- tinypy/
| -- foo/
| -- bar/
| -- tests/
| -- tinypyapp.py
| -- run_tests.py
這是setup.py中的幾行:
setup(
...
packages=find_packages(),
entry_points = {
'console_scripts' : [ 'tinypy = tinypy.tinypyapp:main']
},
test_suite = 'tinypy.run_tests.get_suite',
)
安裝該軟件包后,將安裝一個名為tinypy
的控制台腳本:
pip3 install .
然后我運行覆蓋:
coverage run setup.py test
coverage combine
coverage report
我執行的所有測試都以這樣的方式實現:每個測試都會啟動tinypy
的子tinypy
,因此我在.coveragerc
使用parallel = True
來捕獲coverage運行的結果。
從本質上講,我有布局相同coverage
本身 ,其中coverage
和cmdline.py
是同樣的事情tinypy
和tinypyapp.py
在我的情況。
問題 :執行控制台腳本tinypy
( tinypyapp.py
)時,它將使用tinypy
軟件包的已安裝版本,該版本位於/usr/local/lib/python3.5/site-packages/tinypy/
。 Coverage將忽略./tinypy
源(因為未使用它們)。 如果省略了source
參數,則可以從site-packages/tinypy
看到代碼的覆蓋范圍。
問題 :如何正確構建項目? 當tinypyapp.py
作為腳本安裝時,它與tinypy
文件夾安裝在同一級別(更高級別,不在內部)。 我無法將tinypyapp.py
放置在tinypy
文件夾之外,因為setup.py無法找到它。 因此,我不能使用tinypyapp.py
而不得不使用腳本的名稱( tinypy
)。
我認為最簡單的方法是不將正在處理的代碼安裝到站點程序包中,而是使用開發安裝程序:
pip install -e .
我當前的解決方法是在根文件夾中創建test_entry_point.py
:
tiny-py-interpreter/
|-- setup.py
|-- test_entry_point.py
|-- ...
具有以下內容:
import sys
from tinypy.tinypyapp import main
if __name__ == '__main__':
main()
並在測試中啟動子進程時使用以下文件名:
tinypy_binary = sys.executable + ' ' + os.getcwd() + '/test_entryp.py'
subprocess.run(tinypy_binary, ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.