更新tox 项目中有一个问题可能会被实现,它会添加功能以更“官方”的方式处理这些类型的问题。讨论在这里:添加一个选项以在创建 virtualenv 之后但在其他步骤之前运行命令
更新(更多背景知识):主要问题是假设其他一些软件包已经安装在setup.py
. 这类问题属于bootstrap的范畴,如果要正确处理它们可能会很糟糕,但通常需要付出一些额外的努力才能做到这一点。如果您在设置时确实需要不同的包,您可以查看setup_requires
一些额外的魔法(例如查看setuptools_scm以获得灵感)。在最坏的情况下,如果包不是很复杂,您可以将其作为包的一部分(尽管它有其自身的问题,例如保持最新和可能的许可冲突)。
原始答案:
如果您requirements.txt
已经使用,一个简单(但公认丑陋)的解决方案将是:
- 创建两个(或更多)需求文件(例如
requirements-0.txt
和requirements-1.txt
(希望有更好的名称))。
- 按依赖项将包排序到这些文件中
- 使用命令而不是deps以正确的顺序安装它们
。例如
[testenv]
deps =
pytest
# whatever else where order does not matter
commands =
pip install -r {toxinidir}/requirements-0.txt
pip install -r {toxinidir}/requirements-1.txt
# ... and more if needed
# now do your actual testing ...
pytest tests/unit
...或者,如果您想让它更简单,只需将要导入的setup.py
包从另一个包中粘贴到您的单个 requirements.txt 前面
[...]
commands =
pip install <package that needs to be installed first (e.g. numpy)>
pip install -r {toxinidir}/requirements.txt
pytest tests/unit