我使用upper left
制作了我的项目,我想用setuptools
进行测试。我在变量中列出了依赖项,并添加到tox
参数(setup()
和tests_require
)。我的项目需要安装extras_require
中列出的所有依赖项进行测试,但tests_require
未安装它们。
我尝试了这个,但它不起作用:
pip install
如何在不必管理多个依赖项列表的情况下安装测试依赖项(即install_command = pip install {opts} {packages}[tests]
和test_requirements.txt
变量中都列出了所有依赖项?)
答案 0 :(得分:28)
我通过轻微滥用extra requirements来实现这一目标。你几乎在那里尝试额外的语法,只是tests_require
deps不能自动提供。
这样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语法获取安装的测试依赖项,例如:从项目根目录:
$ pip install .[test]
在tox.ini
中为Tox提供相同的语法,无需调整默认install_command
:
[testenv]
commands = {posargs:pytest}
deps = .[test]
现在您不需要在两个位置维护依赖项列表,并且它们表示它们应该用于已发布包的位置:在打包元数据中而不是requirements.txt
个文件中。
看来这个小小的额外内容是is not all that uncommon。
答案 1 :(得分:3)
您可以做的是拥有一个文件(称为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,
...
)
答案 2 :(得分:2)
如果使用以下命令,Tox将在运行测试之前安装test_requires
:
commands = {envpython} setup.py test
您还需要add to setup.py进行以下测试:
test_suite="tests_module"
最后,here是一个类似问题的答案,其中有一个很好的例子。
答案 3 :(得分:0)
Tox建议避免使用python setup.py test。因此,我们可以随意使用“ extras”而不是“ tests_require”。
调用deps =。[test]将从您当前的工作目录中安装整个软件包。有点浪费,因为在此操作之后,tox仍会安装sdist。另外,如果要从sdist安装主软件包,则可能还需要从其安装'extras'。
您对install_command的编辑将尝试从“ extras”而非“ tests_require”安装“ tests”。即使有效,也会影响部门列出的所有项目,不是一个好主意。
Tox 2.6引入了extras选项。这将从sdist安装“ extras”,仅针对您的sdist并在其进行常规sdist安装时安装。