我的tox.ini
文件中包含以下内容:
...
[testenv]
usedevelop = True
deps =
--editable=file:///{toxinidir}/../some_dep
--requirement=requirements.txt
...
现在requirements.txt
看起来像这样:
...
some_dep>=0.1.2
当tox
创建virtualenv时,它会说:
py3-env create: /Users/someuser/PycharmProjects/some_project/.tox/py3-env
py3-env installdeps: --requirement=requirements.txt, --editable=file:////Users/someuser/PycharmProjects/some_project/../some_dep
当然/Users/someuser/PycharmProjects/some_project/../some_dep
存在。
现在的问题是,我希望找到一个egg-link
指向/Users/someuser/PycharmProjects/some_project/../some_dep
,而是从PyPI安装some_dep
包。
--editable
的内容似乎忽略或覆盖了requirements.txt
。
如果我从some_dep
删除了requirements.txt
我收到了预期的行为:egg-link
存在且一切正常,但我无法将requirements.txt
修改为这会使我的部署变得复杂。
如果我更改了--editable
中--requirement
和tox.ini
行的排序,则无需更改:some_dep
仍然可以从PyPI安装。
这是一个预期的行为吗?我能做些什么来让我的--editable
参数得到尊重?
我正在使用:
pip 9.0.3 from /Users/mnowotka/PycharmProjects/ygo-public-apis/venv/lib/python3.6/site-packages (python 3.6)
答案 0 :(得分:0)
tox连接你在deps中定义的内容并将其传递给pip(作为一个命令执行),因此结果由pip控制。 pip不保证在命令行上传递的安装顺序,所以这就是它的原因。
话虽如此:如果您在可编辑安装后安装定义更高版本化软件包的requirements.txt
(实际版本应始终高于源的本地开发版的开发版本),则可以预期它升级了。如果要确保安装了较低版本的本地软件包,可以在tox中执行此操作:
[testenv]
deps =
# whatever you need where order does not matter
--requirement=requirements.txt
commands =
pip install --upgrade --editable={toxinidir}/../some_dep
# now do your actual testing ...
pytest tests/unit
deps中定义的内容不遵循可预测的顺序(如上所述)。安装deps后执行的命令按顺序执行,可用于在执行实际测试之前修复/调整任何内容。
另见this answer to a similar question。
旁注:如果tox应该以不同的方式处理此问题,则会有一些discussion on the tox issue tracker。