在安装时检测Python传递依赖问题?

时间:2016-12-23 18:36:41

标签: python python-2.7 pip setuptools transitive-dependency

我最近以任何理智的方式了解到pip does not resolve transitive dependencies。这意味着在安装软件包之后,实际上可能无法满足其某些依赖项的依赖性。

有没有办法以编程方式检查安装后是否真正满足所有已安装软件包的依赖项?

具体来说,我希望能够创建virtualenv,在其中安装一些软件包,然后验证所有已安装的软件包实际上是否具有所需的依赖项。

编辑:以下是更好地说明问题的示例。假设包A依赖于包BC,这两个包都依赖于包D,可能具有不同的版本范围。安装A时,pip将任意选择D的指定版本范围之一来满足。例如,可能会满足BD的依赖性,但可能无法满足C D所需的版本。我想检测是否存在这样的问题。

1 个答案:

答案 0 :(得分:0)

This answer显示了如何获取所有本地安装的软件包。 This one显示了一种验证是否已安装给定包的方法,该方法还以递归方式检查包的依赖关系。结合这些:

import pip
import pkg_resources

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

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

除此之外:这似乎是新pip check命令的目的,但它没有捕获上述脚本捕获的一些依赖性问题,例如extras-related issues