我最近以任何理智的方式了解到pip
does not resolve transitive dependencies。这意味着在安装软件包之后,实际上可能无法满足其某些依赖项的依赖性。
有没有办法以编程方式检查安装后是否真正满足所有已安装软件包的依赖项?
具体来说,我希望能够创建virtualenv,在其中安装一些软件包,然后验证所有已安装的软件包实际上是否具有所需的依赖项。
编辑:以下是更好地说明问题的示例。假设包A
依赖于包B
和C
,这两个包都依赖于包D
,可能具有不同的版本范围。安装A
时,pip将任意选择D
的指定版本范围之一来满足。例如,可能会满足B
对D
的依赖性,但可能无法满足C
D
所需的版本。我想检测是否存在这样的问题。
答案 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。