python pip install test dependencies for tox from www.example.com

6g8kf2rb  于 2023-04-28  发布在  Python
关注(0)|答案(4)|浏览(117)

我用setuptools做了我的项目,我想用tox测试它。我在一个变量中列出了依赖项,并添加到setup()参数(tests_requireextras_require)。我的项目需要安装tests_require中列出的所有依赖项进行测试,但pip install没有安装它们。
我试过这个,但它不起作用:

install_command = pip install {opts} {packages}[tests]

如何安装测试依赖项而不必管理多个依赖项列表(即e.在test_requirements.txttests_require变量中列出所有依赖项)?

0dxa2lsx

0dxa2lsx1#

我是通过稍微滥用一些额外的要求来达到这个目的的。您几乎可以尝试extras语法,只是tests_require dep不能以这种方式自动可用。
setup.py是这样的:

from setuptools import setup

test_deps = [
    'coverage',
    'pytest',
]
extras = {
    'test': test_deps,
}

setup(
    # Other metadata...
    tests_require=test_deps,
    extras_require=extras,
)

然后,您可以使用extras语法(e.例如,从项目根目录:

$ pip install .[test]

tox.ini中对Tox给予相同的语法,无需调整默认的install_command

[testenv]
commands = {posargs:pytest}
deps = .[test]

现在你不需要在两个地方维护依赖项列表,它们在发布包的位置表示:而不是requirements.txt文件。
看来这个小额外的黑客is not all that uncommon .

zzwlnbp8

zzwlnbp82#

解决方案

Tox 2.6引入了extras选项。这将从它刚刚构建的sdist安装extras,只针对该sdist并且在它正在进行正常的sdist安装时。
www.example. com 应该看起来像:

setuptools.setup(
    ...
    extras_require={
        'tests': ['pytest>=3.7.0', 'more_packages'],
    },
    ...
 )

tox.ini看起来应该是:

[testenv]
...
extras = tests
...

关注点

其他方法可能会得到类似的结果,但会引入不必要的风险并限制其他功能的有用性:
deps =.[tests]是一个有点黑客。该字段用于环境需要的包。Ifwww.example. www.example.com 。如图所示,它将从您的工作目录安装整个软件包(无论处于何种状态!)只是为了获得tests中的包列表。接下来将运行install_command,安装新创建的sdist。简而言之,sdist的问题可能会被掩盖,因为您已经从工作副本安装了它。
编辑install_command是矫枉过正。它将覆盖通过deps安装的项目。(同样,也许你用它来安装一个特定版本的软件包)。
运行python setup.py test时使用tests_require。Tox建议避免使用python setup.py test,这样你就可以忽略tests_require

lbsnaicq

lbsnaicq3#

你可以做的是创建一个文件(称为test_requirements.txt)并列出测试依赖项,如下所示:

dnspython==1.12.0
easydev==0.8.3
enum34==1.0.4
fabric==1.10.1
...

然后,在setup.py中,解析并将文件内容存储在列表中,并将该列表传递给setup

tests_require = [line.strip() for line in 
                 open('test_requirements.txt')
                 if line.strip() and not line.strip().startswith('--')]

setuptools.setup(
    ...
    tests_require=tests_require,
    ...
)
i34xakig

i34xakig4#

如果使用以下命令,Tox将在运行测试之前安装test_requires

commands = {envpython} setup.py test

你还需要add to setup.py在哪里测试:

test_suite="tests_module"

最后,here用一个很好的例子回答了一个类似的问题。

相关问题