<p>尽管约束不兼容,pip 仍成功退出</p>

创建于 2019-09-03  ·  3评论  ·  资料来源: pypa/pip

环境

  • 点子版本:19.2.3
  • Python版本:3.7.4
  • 操作系统:macOS 18.7.0

这也是使用docker run python:3复制的。

描述

如果约束文件指定了不兼容的版本,pip 会安装一个依赖项损坏的包。 显示错误消息,但退出代码为0

例如, environs 5.2.1需要marshmallow>=2.7.0 ,但如果后者在约束文件中指定,pip 会使用marshmallow 2.6.0安装它。

预期行为

pip 不应安装该软件包,并以失败退出。

如何繁殖

  1. 使用marshmallow==2.6.0创建约束
  2. 使用environs==5.2.1创建 requirements.txt
  3. 运行pip install -r requirements.txt -c constraints.txt

输出

$ docker run --rm -ti python:3 sh
# python -V
Python 3.7.4
# pip -V
pip 19.2.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
# uname -a
Linux 4d4f16cc965f 4.9.184-linuxkit #1 SMP Tue Jul 2 22:58:16 UTC 2019 x86_64 GNU/Linux
# echo marshmallow==2.6.0 > constraints.txt
# echo environs==5.2.1 > requirements.txt
# pip install -r requirements.txt -c constraints.txt
Collecting environs==5.2.1 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5f/c9/6b576b8b374dfe78d9435988e6a53497822f31b9da5bdd446343ad1a4d1b/environs-5.2.1-py2.py3-none-any.whl
Collecting marshmallow==2.6.0 (from -c constraints.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/33/44/c3bdd4222909b6452ebe5c028ea5dbe7e9409307b3b933026218c677fcf1/marshmallow-2.6.0-py2.py3-none-any.whl (44kB)
     |████████████████████████████████| 51kB 729kB/s
Collecting python-dotenv (from environs==5.2.1->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/57/c8/5b14d5cffe7bb06bedf9d66c4562bf90330d3d35e7f0266928c370d9dd6d/python_dotenv-0.10.3-py2.py3-none-any.whl
ERROR: environs 5.2.1 has requirement marshmallow>=2.7.0, but you'll have marshmallow 2.6.0 which is incompatible.
Installing collected packages: marshmallow, python-dotenv, environs
Successfully installed environs-5.2.1 marshmallow-2.6.0 python-dotenv-0.10.3
# echo $?
0
duplicate auto-locked awaiting response support

所有3条评论

这与#988 基本相同(另见:#5137)。

Pip 在第一次遇到的基础上计算出要求(尽管这可能会在没有通知的情况下发生变化)。 当需求文件和约束文件被解析时,我们最终以environs==5.2.1作为需求和marshmallow==2.6.0作为约束。 当environs被处理时, marshmallow被视为一个依赖项,并且现有的条目 ( marshmallow==2.6.0 ) 被标记为一个要求,并且现有的版本是用于安装的版本. 我认为使用用户提供的值(即使只是作为约束)可能是我们在这里可以拥有的最正确的行为。

跟踪的错误与为普通pip install environs==5.2.1 marshmallow==2.6.0或单独调用(如pip install environs==5.2.1 && pip install marshmallow==2.6.0 )跟踪的错误相同。

这是在 #5000 中添加的。 退出代码不是 1 的原因是向后兼容。

如果您想以编程方式知道这种情况正在发生,您需要运行pip check

此问题已自动关闭,因为我们要求原作者提供更多信息的请求没有得到回应。 只有当前问题中的信息,我们没有足够的信息来采取行动。 如果您有或找到我们需要的答案,请联系我们,以便我们进一步调查。

此页面是否有帮助?
0 / 5 - 0 等级