我有一个包含以下布局的包:
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
的子进程,因此我在parallel = True
中使用.coveragerc
来捕获覆盖率运行的结果
基本上,我的布局与coverage
itself相同,其中coverage
和cmdline.py
与tinypy
和tinypyapp.py
相同就我而言。
问题:执行控制台脚本tinypy
(tinypyapp.py
)时,它使用tinypy
软件包的已安装版本,该软件包位于{ {1}}。覆盖范围忽略/usr/local/lib/python3.5/site-packages/tinypy/
中的来源(因为它们未被使用)。如果省略./tinypy
参数,则可以查看来自source
的代码的覆盖范围。
问题:如何正确构建项目?当site-packages/tinypy
作为脚本安装时,它安装在与tinypyapp.py
文件夹相同的级别上(高一级,不在内部)。我无法将tinypy
放在tinypyapp.py
文件夹之外,因为setup.py无法找到它。因此,我无法使用tinypy
并且必须使用脚本的名称(tinypyapp.py
)。
答案 0 :(得分:1)
我认为最简单的方法是不将您正在使用的代码安装到site-packages中,而是使用开发安装:
pip install -e .
答案 1 :(得分:0)
我目前的解决方法是在根文件夹中创建test_entry_point.py
:
tiny-py-interpreter/
|-- setup.py
|-- test_entry_point.py
|-- ...
具有以下内容:
import sys
from tinypy.tinypyapp import main
if __name__ == '__main__':
main()
在test中启动子进程时使用以下文件名:
tinypy_binary = sys.executable + ' ' + os.getcwd() + '/test_entryp.py'
subprocess.run(tinypy_binary, ...)