0

我正在使用 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
...

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

4

2 回答 2

3

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

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

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

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

于 2020-12-14T08:23:33.050 回答
1

据我所知(这是使用 pip-tools 的几年),只要您这样做,pip-tools 将始终为您提供稳定的树,然后仅从“锁定”需求文件中安装依赖项。

于 2020-12-06T20:46:39.233 回答