piptools和/或新的解析器是否阻止升级到破坏主依赖关系的子依赖关系版本?

2024-05-13 07:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pip工具5.4.0、PIP20.3.1和python3。我已经看过pip工具的源代码和关于新解析器的pip博客文章。我的问题没有得到明确的答案。如果我跑步:

pipdeptree
flake8==3.8.4
  - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
  - pycodestyle [required: >=2.6.0a1,<2.7.0, installed: 2.6.0]
  - pyflakes [required: >=2.2.0,<2.3.0, installed: 2.2.0
...

如果我运行pip-compile --upgrade,pip工具中是否存在内部约束,或者新的pip解析器中是否存在依赖项检查,这些约束会阻止子依赖项升级到超出其约束的程度,例如,mccabe升级到0.7.0


Tags: pipinstalled工具答案解析器源代码flake8文章
2条回答

就我所知(使用pip工具已经有几年了),只要您只从“锁定”的需求文件安装依赖项,pip工具将始终为您提供一个稳定的树

最初的pip工具作者在这里(尽管今天的维护现在由JazzBand collective进行)👋

是的,所有顶级约束(您自己放在requirements.in文件中的约束)以及任何次要约束(随后得到解决的每个具体包版本所需的约束)都形成了一个大的“约束空间”。pip工具的解析器将始终解析该约束空间内的版本,或抛出错误

在您的示例中mccabe所需的flake8==3.8.4版本将因此得到尊重,因此得到解决的mccabe版本将永远不会是0.7或更高版本。(这正是pip-tools的目的。)

在撰写本文时,3.8.4是flake8的最高版本。但是,如果您在requirements.in文件中指定了flake8(没有任何版本限制),那么将来可能会升级到,比如说3.9.0。未来的版本可能会为mccabe指定更大的范围,比如mccabe>=0.6,<0.8之类的。在这种情况下,pip-compile upgrade的结果当然可以升级到0.7.0

相关问题 更多 >