¿Cómo se puede obtener mediante programación la lista de dependencias de un paquete de Python?
El estándar los setup.py
tiene documentados, pero no puedo encontrar una manera fácil de acceder a ellos desde Python o la línea de comandos.
Idealmente, estoy buscando algo como:
$ pip install somepackage --only-list-deps
kombu>=3.0.8
billiard>=3.3.0.13
boto>=2.26
o:
>>> import package_deps
>>> package = package_deps.find('somepackage')
>>> print package.dependencies
['kombu>=3.0.8', 'billiard>=3.3.0.13', 'boto>=2.26']
Tenga en cuenta que no estoy hablando de importar un paquete y encontrar todos los módulos referenciados. Si bien esto podría encontrar la mayoría de los paquetes dependientes, no podría encontrar el número de versión mínimo requerido. Eso solo se almacena en setup.py.
Respuestas:
Además del
pip show [package name]
comando, existepipdeptree
.Solo haz
entonces corre
y le mostrará sus dependencias en forma de árbol, por ejemplo,
El proyecto se encuentra en https://github.com/naiquevin/pipdeptree , donde también encontrará información de uso.
fuente
pipdeptree
muestra las dependencias de todos los paquetes instalados , no solo las de un paquete determinado. Si bien puede filtrar su--json
salida, aún depende de los paquetes que ya estén instalados.requirements.txt
-p
opción para seleccionar solo unos pocos paquetes cuyas dependencias desea explorar.pipdeptree
fue muy útil al optimizarrequirements.txt
.$ pipdeptree | grep -P '^\w+'
Esto genera solo paquetes de nivel superior. Más información aquíIntente usar el
show
comando enpip
, por ejemplo:Actualizar (recuperar deps con la versión especificada):
fuente
Requires
sección$ pip3 show beautifulsoup4
muestra vacíoRequires:
para mí, ¿no depende beautifulsoup4 de nada?beautifulsoup4
.Algunas respuestas aquí muestran que pip se está importando para su uso en programas. La documentación de pip desaconseja fuertemente este uso de pip .
En lugar de acceder a
pkg_resources
través de la importación de pip, en realidad puede importarpkg_resources
directamente y usar la misma lógica (que en realidad es una de las soluciones sugeridas en los documentos de pip vinculados para cualquiera que desee ver la metainformación del paquete mediante programación).Si tiene problemas para averiguar exactamente cuál es el nombre de su paquete, la
WorkingSet
instancia devuelta por lospkg_resources.working_set
implementos__iter__
para que pueda imprimirlos todos y, con suerte, encontrar el suyo allí :)es decir
Esto funciona con python 2 y 3 (aunque deberá ajustar las declaraciones de impresión para python2)
fuente
(ESTA ES UNA RESPUESTA LEGADA Y DEBE EVITARSE PARA LAS VERSIONES DE PIP MODERNAS Y DEJARLA AQUÍ PARA REFERENCIA A VERSIONES DE PIP ANTERIORES) La respuesta de Alex es buena (+1). En Python:
debería devolver algo como
donde twisted es el nombre del paquete, que puede encontrar en el diccionario:
para enumerarlos todos:
debería darte listas como esta:
fuente
_vendor
atributo no parece existir en la versión pip19.1.1
(Edición: ¡Muy bien, parece que se ha movido alpkg_resources
paquete en la última versión de Python!)pip show
parte es buena, no el resto). De cualquier usopip show
, pipdeptree o ver la respuesta de Jordan Mackie usando setuptools 'pkg_resources
directamente.Utilice https://libraries.io/ . Es un buen lugar para explorar las dependencias antes de instalar usando pip.
P.ej. Escriba google-cloud-storage y busque, luego podrá encontrar la página de la biblioteca ( https://libraries.io/rubygems/google-cloud-storage ). Seleccione la versión para la que desea explorar las dependencias de las 'Versiones' (la predeterminada es la más reciente). En 'Dependencias' puede encontrar la lista de dependencias y sus versiones compatibles.
fuente
Prueba esto de acuerdo con este artículo en Python:
Se mostrará como:
fuente