是否可以使用pip
显示反向依赖关系?
我想知道哪个包需要包foo
。此软件包需要哪个版本的foo
。
答案 0 :(得分:15)
我发现亚历山大的答案很完美,除了难以复制/粘贴。这是相同的,准备粘贴:
import pip
def rdeps(package_name):
return [pkg.project_name
for pkg in pip.get_installed_distributions()
if package_name in [requirement.project_name
for requirement in pkg.requires()]]
rdeps('some-package-name')
答案 1 :(得分:11)
对于使用pip的python API的已安装软件包,这是可行的。有pip.get_installed_distributions
功能,可以为您提供当前安装的所有第三方软件包的列表。
# rev_deps.py
import pip
import sys
def find_reverse_deps(package_name):
return [
pkg.project_name for pkg in pip.get_installed_distributions()
if package_name in {req.project_name for req in pkg.requires()}
]
if __name__ == '__main__':
print find_reverse_deps(sys.argv[1])
此脚本将输出需要指定的包的列表:
$python rev_deps.py requests
答案 2 :(得分:4)
一个人可以使用pipdeptree
软件包。要列出已安装的cffi
软件包的反向依赖关系:
$ pipdeptree -p cffi -r
cffi==1.14.0
- cryptography==2.9 [requires: cffi>=1.8,!=1.11.3]
- social-auth-core==3.3.3 [requires: cryptography>=1.4]
- python-social-auth==0.3.6 [requires: social-auth-core]
- social-auth-app-django==2.1.0 [requires: social-auth-core>=1.2.0]
答案 3 :(得分:3)
要更新当前版本(2019年)的答案,当pip.get_installed_distributions()
不再存在时,请使用pkg_resources
(如a comments中所述):
import pkg_resources
import sys
def find_reverse_deps(package_name):
return [
pkg.project_name for pkg in pkg_resources.WorkingSet()
if package_name in {req.project_name for req in pkg.requires()}
]
if __name__ == '__main__':
print(find_reverse_deps(sys.argv[1]))