传递依赖如何在Python pip中起作用?

时间:2018-04-04 04:53:34

标签: python pip

我有一个自动机器构建,它安装了一个包含大量依赖项(包X,Y和Z)的Python包(包A)。软件包A没有固定软件包X,Y或Z的版本,所以即使我固定了软件包A的版本,由于软件包X中的更新中断,我的构建失败了很多次。

为了解决这个问题,我计划制作一个require.txt文件,该文件固定了A,X,Y和Z的显式版本(而不仅仅是A,这就是现在发生的事情)。假设pip对固定和传递依赖性解析都有适当的支持,这应该可行。

似乎这适用于我当前版本的pip,但我发现了很多有关pip如何处理这些事情的相互矛盾的信息(例如,this thread有100条评论谈论pip依赖解析如何不是很好。)

所以我的问题:

  1. 依赖项解析如何在pip中有效?如果包A依赖于X> = 7,并且我的顶级requirements.txt指定X == 8,则pip是否可能安装X版本9,因为它首先查看A并尝试获得最多最近版本的传递依赖?
  2. 是否有规范/权威来源描述了pip中依赖项解析的工作原理?我能找到的最好的是this page,但是我在网上看到的一些评论看起来这个页面在传递依赖性方面并非100%正确。
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,因此决定使用pip-tools而不是普通的pip来生成和维护用于生产代码的requirements.txt文件。

您有一个使用in Knack's answer here

的示例