gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:19 26 4
gpt4 key购买 nike

我最近了解到 pip does not resolve transitive dependencies以任何理智的方式。这意味着在安装一个包之后,它的某些依赖项的依赖项可能实际上并没有得到满足。

有没有办法以编程方式检查所有已安装包的依赖项是否在安装后得到实际满足?

具体来说,我希望能够创建一个 virtualenv,将一些包安装到其中,然后验证所有安装的包是否确实具有所需的依赖项。


编辑:这里有一个例子可以更好地说明问题。假设包A依赖于包BC,这两个包都依赖于包D,可能版本不同范围。安装A时,pip会任意选择指定版本范围中的一个让D满足。例如,BD 的依赖可能得到满足,但 CD 的要求版本可能会得到满足不满意。我想检测是否存在这样的问题。

最佳答案

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 .


更新:最新版本的pip 不提供get_installed_distributions() 函数。每https://github.com/pypa/pip/issues/5243 , pkg_resources.working_set 可以用来获取依赖列表:

import pkg_resources

pkg_resources.require(str(dep.as_requirement())
for dep in pkg_resources.working_set)

关于python - 在安装时检测 Python 传递依赖问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com