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_dep
的 egg-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 应该以不同的方式处理这个问题。
我的 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_dep
的 egg-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 应该以不同的方式处理这个问题。