Можно ли показать обратные зависимости с помощью pip
?
Я хочу знать, какой пакет нуждается в пакете foo
. И какая версия foo
нужна этому пакету.
Можно ли показать обратные зависимости с помощью pip
?
Я хочу знать, какой пакет нуждается в пакете foo
. И какая версия foo
нужна этому пакету.
Это возможно для уже установленных пакетов с использованием 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
Я обнаружил, что Александр отвечает идеально, но трудно скопировать/вставить. Вот то же самое, готово к вставке:
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')
Чтобы обновить ответ до текущего (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]))