无论顺序如何,pip --editable都会被覆盖

时间:2018-04-12 07:57:39

标签: python python-3.x testing dependencies pypi

我的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--requirementtox.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)

1 个答案:

答案 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