show reverse dependencies with pip?

2020-02-26 04:50发布

Is it possible to show the reverse dependencies with pip?

I want to know which package needs package foo. And which version of foo is needed by this package.

3条回答
Anthone
2楼-- · 2020-02-26 05:30

This is possible for already installed packages using pip's python API. There is the pip.get_installed_distributions function, which can give you a list of all third party packages currently installed.

# 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])

This script will output the list of packages, that require a specified one:

$python rev_deps.py requests
查看更多
Anthone
3楼-- · 2020-02-26 05:32

I found Alexander's answer perfect, except it's hard to copy/paste. Here is the same, ready to paste:

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')
查看更多
家丑人穷心不美
4楼-- · 2020-02-26 05:34

To update the answer to current (2019), when pip.get_installed_distributions() does not exist anymore, use pkg_resources (as mentioned in 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]))
查看更多
登录 后发表回答