如何构建python项目以与coverage.py?

时间:2015-12-21 19:23:52

标签: python setup.py 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的子进程,因此我在parallel = True中使用.coveragerc来捕获覆盖率运行的结果

基本上,我的布局与coverage itself相同,其中coveragecmdline.pytinypytinypyapp.py相同就我而言。

问题:执行控制台脚本tinypytinypyapp.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)。

2 个答案:

答案 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, ...)