2016-12-23 19 views
2

我最近以任何理智的方式了解pip does not resolve transitive dependencies。这意味着在安装一个软件包之后,它的一些依赖关系的依赖关系可能实际上不会被满足。在安装时检测Python传递依赖性问题?

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

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


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

+0

是的,使用需求文件并固定您的版本号。 –

+0

@BurhanKhalid请看上面的问题。我正在寻求一种“在安装时检测Python传递依赖性问题”的方法。我不是要求一种方法来避免传递依赖问题,尤其是不能通过手动解决依赖问题。 – augurar

回答

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