Показать обратные зависимости с пипсом?

Можно ли показать обратные зависимости с помощью pip?

Я хочу знать, какой пакет нуждается в пакете foo. И какая версия foo нужна этому пакету.

Ответ 1

Это возможно для уже установленных пакетов с использованием API-интерфейса pipon. Существует функция 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])

Этот script выведет список пакетов, для которых требуется указанное:

$python rev_deps.py requests

Ответ 2

Я обнаружил, что Александр отвечает идеально, но трудно скопировать/вставить. Вот то же самое, готово к вставке:

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')

Ответ 3

Чтобы обновить ответ до текущего (2019), когда pip.get_installed_distributions() больше не существует, используйте pkg_resources (как упомянуто в комментариях):

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