Cuando hago una congelación de pip, veo una gran cantidad de paquetes de Python que no instalé explícitamente, p. Ej.
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
¿Hay alguna manera de determinar por qué pip instaló estos paquetes dependientes particulares? En otras palabras, ¿cómo determino el paquete principal que tenía estos paquetes como dependencias?
Por ejemplo, podría querer usar Twisted y no quiero depender de un paquete hasta que sepa más sobre no desinstalarlo o actualizarlo accidentalmente.
pipdeptree -r
"Muestra el árbol de dependencias de manera inversa, es decir, las subdependencias se enumeran con la lista de paquetes que las necesitan debajo de ellas".pipdeptree
es genial. Por desgracia, no parece tener en cuenta las dependencias de los paquetes instalados por Conda: por ejemplo, en un Conda env dondematplotlib
ynumpy
se han instalado con PIP, peroscipy
se instaló usando Conda,scipy
aparece en la pipdeptree como no tener depencies y sin dependientes (tambiénpip show scipy
aparece Sin requisitos).python -m pipdeptree
contrario (incluso cuando el ejecutable esté instalado en virtualenv) solo enumera las dependencias del sistema.El
pip show
comando mostrará qué paquetes son necesarios para el paquete especificado (tenga en cuenta que el paquete especificado ya debe estar instalado):pip show
se introdujo en la versión pip 1.4rc5fuente
pip show
se introdujo en la versión 1.4rc5, y está presente en la versión 1.4.1 (actual a partir de la escritura)pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
, pero parece que pipdeptree ahora es una mejor solución.Como dije recientemente en un hilo hn , recomendaré lo siguiente:
Tenga un
requirements.txt
archivo comentado con sus principales dependencias:Instalar sus dependencias:
pip install -r requirements.txt
. Ahora obtienes la lista completa de tus dependencias conpip freeze -r requirements.txt
:Esto le permite mantener su estructura de archivos con comentarios, separando muy bien sus dependencias de las dependencias de sus dependencias. De esta manera, tendrás un momento mucho más agradable el día que necesites eliminar uno de ellos :)
Tenga en cuenta lo siguiente:
requirements.raw
con control de versiones para reconstruir su completorequirements.txt
.pip install --no-install <package_name>
para enumerar requisitos específicos.fuente
pip freeze -r requirements.txt
no se usa ampliamente. Muy útil para mantener las dependencias y subdependencias.pip install
ya no es compatible--no-install
.También puede usar un comando de una línea que canaliza los paquetes en requisitos para mostrar pip.
fuente
<package_name>==<package_version>
.En primer lugar,
pip freeze
muestra todos los paquetes actualmente instalados en Python, no necesariamente usando PIP.En segundo lugar, los paquetes de Python contienen la información sobre los paquetes dependientes, así como las versiones requeridas . Puede ver las dependencias de un paquete en particular utilizando los métodos descritos aquí . Cuando actualiza un paquete, el script de instalación como PIP se encargará de la actualización de las dependencias por usted.
Para resolver la actualización de paquetes, recomiendo usar archivos de requisitos PIP . Puede definir qué paquetes y versiones necesita e instalarlos de una vez usando pip install.
fuente
Use pipupgrade !
pipupgrade muestra un gráfico de dependencia y resalta cada paquete para una posible actualización (basada en versiones semánticas). También muestra dependencias secundarias conflictivas de una manera bonita.
pipupgrade
También se asegura de actualizar los paquetes presentes en múltiples entornos Python. Compatible con Python2.7 +, Python3.4 + y pip9 +, pip10 +, pip18 +, pip19 +.fuente
(solución alternativa, respuesta no verdadera)
Tuve el mismo problema, con lxml no instalándose y yo queriendo saber quién necesitaba lxml. No quién lxml necesitaba . Terminé evitando el problema por.
observando dónde se colocaban los paquetes de mi sitio.
vaya allí y grep recursivo para la importación (el último grep's --invert-match sirve para eliminar los propios archivos lxml de la consideración).
Sí, no hay una respuesta sobre cómo usar pip para hacerlo, pero no obtuve ningún éxito de las sugerencias aquí, por alguna razón.
fuente
Escribí un guión rápido para resolver este problema. La siguiente secuencia de comandos mostrará los paquetes principales (dependientes) de cualquier paquete dado. De esta manera, puede estar seguro de que es seguro actualizar o instalar cualquier paquete en particular. Se puede usar de la siguiente manera:
dependants.py PACKAGENAME
fuente
get_installed_distributions()
método ya no está disponible. github.com/pypa/pip/issues/5243