pip-tools 和/或新的解析器是否会阻止升级到破坏主要依赖项的从属依赖项版本?

Ste*_*eve 2 python pip python-3.x pip-tools

我正在使用 pip-tools 5.4.0、pip 20.3.1 和 python3。我查看了 pip-tools 源代码和有关新解析器的 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
...
Run Code Online (Sandbox Code Playgroud)

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

nvi*_*vie 7

pip-tools 的原始作者在这里(尽管今天的维护现在由JazzBand 集体进行)

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

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

在撰写本文时,3.8.4 是 flake8 的最高版本。但是,如果您flake8在文件中指定(没有任何版本限制)requirements.in,那么将来可能会升级到 3.9.0 未来的版本可能会为mccabemccabe>=0.6,<0.8等指定更广泛的范围。那样的话,结果当然pip-compile --upgrade 可能会升级到0.7.0。mccabe