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

pip --editable gets overwritten regardless of the order

我的 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 存在。

现在的问题是,我希望找到指向 /Users/someuser/PycharmProjects/some_project/../some_depegg-link,但 some_dep 包是从 PyPI 安装的。

--editable 似乎被 requirements.txt 的内容忽略或覆盖。

如果我从 requirements.txt 中删除 some_dep,我会得到一个预期的行为:egg-link 存在并且一切都按预期工作,但我无法修改我的 requirements.txt 因为这会使我的部署复杂化。

如果我在 tox.ini 中更改 --editable--requirement 行的顺序,则没有任何变化:some_dep 仍然从 PyPI 安装。

这是预期的行为吗?我可以做些什么来让我的 --editable 参数得到尊重?

我正在使用:

pip 9.0.3 from /Users/mnowotka/PycharmProjects/ygo-public-apis/venv/lib/python3.6/site-packages (python 3.6)

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 后执行的命令按顺序执行,可用于 fix/adjust 在执行实际测试之前的任何内容。

另见

旁注:有一些 discussion on the tox issue tracker if tox 应该以不同的方式处理这个问题。