【发布时间】:2022-02-11 03:58:44
【问题描述】:
我有一个自动机器构建,它安装了一个 Python 包(包 A),其中包含大量依赖项(包 X、Y 和 Z)。包 A 不固定包 X、Y 或 Z 的版本,因此即使我为包 A 固定版本,也有很多次我的构建失败是因为包 X 中的重大更新。
为了解决这个问题,我计划制作一个 requirements.txt 文件,该文件固定 A、X、Y 和 Z 的显式版本(而不仅仅是 A,这就是现在发生的情况)。假设pip 对固定和传递依赖解析有适当的支持,这应该可以工作。
这似乎适用于我当前版本的 pip,但我发现了很多关于 pip 如何处理这些事情的相互矛盾的信息(例如,this thread 与 100 个 cmets 讨论 pip依赖解析不是很好)。
所以我的问题:
-
pip中的依赖关系解析如何工作?如果包 A 依赖于 X>=7,并且我的顶级 requirements.txt 指定 X==8,pip是否有可能安装 X 版本 9,因为它首先查看 A 并尝试获取最新版本传递依赖? - 是否有规范/权威来源描述了
pip中的依赖关系解析如何工作?我能找到的最好的是 this page,但我在网上看到的一些 cmets 使得该页面在涉及传递依赖项时似乎不是 100% 正确。
谢谢!
【问题讨论】:
-
我也非常有兴趣了解更多关于这方面的信息,如有必要,我会提供一些赏金。