如何构建 python 项目以便与 coverage.py 一起使用?
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
的子进程,所以我在 .coveragerc
中使用 parallel = True
来捕获 .coveragerc
的结果覆盖率 运行.
基本上,我的布局与 coverage
itself 相同,其中 coverage
和 cmdline.py
与 tinypy
和 [=24 相同=] 就我而言。
问题:当执行控制台脚本tinypy
(tinypyapp.py
)时,它使用了安装版本的tinypy
包,它位于 /usr/local/lib/python3.5/site-packages/tinypy/
。报道忽略 ./tinypy
中的来源(因为它们未被使用)。如果省略 source
参数,则可以从 site-packages/tinypy
查看代码的覆盖率。
问题:如何正确构建项目?当 tinypyapp.py
作为脚本安装时,它安装在与 tinypy
文件夹相同的级别(更高一级,不在内部)。我无法将 tinypyapp.py
放在 tinypy
文件夹之外,因为 setup.py 无法找到它。因此我不能使用 tinypyapp.py
并且必须使用脚本的名称(即 tinypy
)。
我目前的解决方法是在根文件夹中创建 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, ...)
我认为最简单的方法是不将您正在处理的代码安装到站点包中,而是使用开发安装:
pip install -e .
我有一个布局如下的包裹:
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
的子进程,所以我在 .coveragerc
中使用 parallel = True
来捕获 .coveragerc
的结果覆盖率 运行.
基本上,我的布局与 coverage
itself 相同,其中 coverage
和 cmdline.py
与 tinypy
和 [=24 相同=] 就我而言。
问题:当执行控制台脚本tinypy
(tinypyapp.py
)时,它使用了安装版本的tinypy
包,它位于 /usr/local/lib/python3.5/site-packages/tinypy/
。报道忽略 ./tinypy
中的来源(因为它们未被使用)。如果省略 source
参数,则可以从 site-packages/tinypy
查看代码的覆盖率。
问题:如何正确构建项目?当 tinypyapp.py
作为脚本安装时,它安装在与 tinypy
文件夹相同的级别(更高一级,不在内部)。我无法将 tinypyapp.py
放在 tinypy
文件夹之外,因为 setup.py 无法找到它。因此我不能使用 tinypyapp.py
并且必须使用脚本的名称(即 tinypy
)。
我目前的解决方法是在根文件夹中创建 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, ...)
我认为最简单的方法是不将您正在处理的代码安装到站点包中,而是使用开发安装:
pip install -e .