在安装时检测到python传递的依赖项问题?

Detect Python transitive dependency issues at install time?

我最近了解到,pip不能以任何理智的方式解决可传递的依赖关系。这意味着在安装一个包之后,它的一些依赖项实际上可能不被满足。

有没有一种方法可以通过编程检查所有安装的包的依赖项在安装后是否都得到了实际满足?

具体来说,我希望能够创建一个virtualenv,在其中安装一些包,然后验证所有安装的包实际上都具有所需的依赖性。

编辑:这里有一个例子可以更好地说明这个问题。假设包A依赖于包BC,两者都依赖于包D,可能具有不同的版本范围。在安装A时,pip将为D任意选择一个指定的版本范围来满足。例如,BD的依赖可能得到满足,但CD所需的版本可能无法满足。我想知道这样的问题是否存在。


此答案显示如何获取所有本地安装的包。这一个演示了一种验证给定包是否已安装的方法,该方法还递归地检查包的依赖项。结合这些:

1
2
3
4
5
import pip
import pkg_resources

pkg_resources.require(str(dep.as_requirement())
                      for dep in pip.get_installed_distributions())

如果任何已安装的软件包的要求不满足,这将引发ResolutionError

旁白:这似乎是新的pip check命令要做的,但它没有捕捉到上面脚本捕捉到的一些依赖性问题,例如与附加项相关的问题。