簡體   English   中英

如何構建與coverage.py一起使用的python項目?

[英]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 本身 ,其中coveragecmdline.py是同樣的事情tinypytinypyapp.py在我的情況。

問題 :執行控制台腳本tinypytinypyapp.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM