¿Desinstalar un paquete con “pip” también elimina los paquetes dependientes?

6 minutos de lectura

avatar de usuario
Hossein

cuando usas pip para instalar un paquete, todos los paquetes requeridos también se instalarán con él (dependencias). ¿La desinstalación de ese paquete también elimina los paquetes dependientes?

  • ¿Por qué no puedes probarlo y ver? Haría exactamente eso para responder a su pregunta, pero por alguna razón, pip no puede obtener el índice del paquete aquí en este momento.

    – Thomas Vander Stichele

    27 de octubre de 2011 a las 16:38

  • he encontrado en grupo de noticias pip que la gente de pip no quiere esta funcionalidad, al menos por ahora. ¡Que pena!

    – Michel Samia

    30 de abril de 2013 a las 9:19

  • @ThomasVanderStichele porque entonces la respuesta no estaría disponible en línea para los futuros Googlers 🙂

    – Marca

    10 de noviembre de 2016 a las 11:11

  • @Mark sería, simplemente escriba la respuesta a su propia pregunta aquí.

    – Thomas Vander Stichele

    23 de enero de 2017 a las 20:08

  • @ThomasVanderStichele: No soy el OP, pero he aquí por qué esta es una sesión de preguntas y respuestas muy legítima para SO: pip es a) notoriamente frágil y dependiente de la versión, también b) en algunas instalaciones de clientes con las que tuve que trabajar, se instaló con derechos de administrador (aunque los paquetes no lo eran), por lo tanto, romperlo o desinstalarlo fue un gran dolor y tuvo una oportunidad para hacerlo bien. c) la conectividad a Internet puede no ser excelente; por razones de seguridad, las máquinas corporativas a menudo tienen firewalls, por lo que no puede asumir la conectividad directa, y debe saber de antemano todo lo que necesitará y su versión, y descargarlo.

    – smci

    13 mayo 2019 a las 8:00


Puede instalar y utilizar el pip-autoremove utilidad para eliminar un paquete más las dependencias no utilizadas.

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y

  • Desafortunadamente, todavía no tiene soporte real para Python3 (ver github.com/invl/pip-autoremove/issues/18) .

    – Asmaier

    6 oct 2019 a las 10:31

  • Funcionando bien para mí en Python 3 a partir de octubre de 2019.

    – estratagema

    21 de octubre de 2019 a las 9:24

  • @loved.by.Jesus – Estoy en python 3.8.3 y probé y todavía veo el comando ejecutado como pip-autoremove (guión, no guión bajo). pip_autoremove me da command not found.

    – bwv549

    19 de junio de 2020 a las 5:38

  • no funcionó en windows ModuleNotFoundError: No module named 'pip_autoremove' (github.com/invl/pip-autoremove/issues/43)

    – lamsal

    4 de febrero a las 17:23

  • pip-autoremove ha estado en un estado roto durante un año porque sus desarrolladores no lo mantienen correctamente. Para repararlo (fuente) tienes que encontrar el archivo pip_autoremove.py que está en su directorio de instalación de python en <python_root>/Scripts/ y moverlo a <python_root>/Lib/site-packages, entonces funcionará normalmente. @TomoyukiAota NO usar pip3-autoremoveun proyecto que lleva dos años sin actualizar y tiene tan pocas estrellas si no quieres estropear o comprometer tu sistema.

    – Atralb

    17 de junio a las 21:11


avatar de usuario
Ingeniero

No, no desinstala los paquetes de dependencias. Solo elimina el paquete especificado:

$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package

hoja de parra == 0.6.1
nariz==1.1.2
pinocho==0.3
nube de nubes == 0.4.5

$ pip uninstall specloud
$ pip freeze

hoja de parra == 0.6.1
nariz==1.1.2
pinocho==0.3

Como puede ver, esos paquetes son dependencias de specloud y todavía están allí, pero no el specloud paquete en sí.

Como se menciona a continuación, puede instalar y utilizar el pip-autoremove utilidad para eliminar un paquete más las dependencias no utilizadas.

  • ¿Qué pasa con los paquetes de dependencia exclusivos de specloud ¿paquete?

    – Fusión

    8 de julio de 2019 a las 17:23

  • @Fusion Esos paquetes son la dependencia de specloud.

    – Ingeniero

    4 mayo 2020 a las 18:56

  • Parafraseando la pregunta de @Fusion, qué sucede si ya tiene otro paquete instalado (y ese paquete tiene sus propias dependencias), no podrá diferenciar qué dependencias pertenecen a qué paquete. Este enfoque solo funciona si tiene un entorno inicial (virtual) limpio.

    – Marca

    25 de agosto de 2020 a las 22:16

  • @Bengineer gracias por su respuesta. ¿Qué sucede si ya eliminé el paquete principal? … y solo entonces me di cuenta de que tengo dependencias sin usar. ¿Necesito reinstalar el padre para pip-autoremove eliminar las dependencias?

    – Lev Barenboim

    17 abr a las 12:36

Eliminé con éxito las dependencias de un paquete usando esta línea bash:

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done

esto funcionó en pip 1.5.4

  • Aunque técnicamente esta solución lo hace eliminar con éxito todas las dependencias, como se menciona en las otras respuestas, además desinstala las dependencias que son no es exclusivo del objetivo, incluidos los instalados desde los paquetes del sistema. Por ejemplo, en mi sistema, esta secuencia de comandos finalmente falló porque el paquete de destino tenía dependencias en común con pip, por lo que pip desinstaló sus propias dependencias antes de que la secuencia de comandos pudiera finalizar y luego falló.

    – cosas siniestras

    17 de febrero de 2016 a las 10:52


  • Cuidado esto elimina solamente el siguiente nivel de dependencias, pero no las dependencias de esas dependencias.

    – tamakisquare

    9 de mayo de 2017 a las 17:19


avatar de usuario
david david

He encontrado la solución aunque para algunos puede ser un poco difícil de llevar a cabo.

1er paso (para python3 y linux):

pip3 install pip-autoremove  

2do paso:

cd /home/usernamegoeshere/.local/bin/  

3er paso:

gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/pip_autoremove.py  

y cambia todos los pip(s) a pip3
4to paso:

./pip-autoremove packagenamegoeshere  

Al menos, esto fue lo que funcionó para mí …

Usted puede tener una oportunidad para https://github.com/cls1991/pef. Eliminará el paquete con todas sus dependencias.

  • pef solo parece funcionar en entornos virtuales, desafortunadamente.

    – bajo

    04/01/2018 a las 10:00

  • Es solo por consideraciones de seguridad, puede piratear el código, simplemente apague el código de protección.

    – cls1991

    4 de enero de 2018 a las 11:26

  • ¿Se asegura de que esas dependencias estén “colgadas”, es decir, que otras distribuciones no las necesiten?

    – Wim

    18 oct 2018 a las 18:45

  • Sí, se basa en el conteo de referencias.

    – cls1991

    15 de agosto de 2019 a las 5:49

  • Hola chicos, he bifurcado y modificado el código. Encuentre el enlace a continuación. github.com/nalangekrushna/pef

    – Krish

    13 de septiembre de 2019 a las 4:22


  • pef solo parece funcionar en entornos virtuales, desafortunadamente.

    – bajo

    04/01/2018 a las 10:00

  • Es solo por consideraciones de seguridad, puede piratear el código, simplemente apague el código de protección.

    – cls1991

    4 de enero de 2018 a las 11:26

  • ¿Se asegura de que esas dependencias estén “colgadas”, es decir, que otras distribuciones no las necesiten?

    – Wim

    18 oct 2018 a las 18:45

  • Sí, se basa en el conteo de referencias.

    – cls1991

    15 de agosto de 2019 a las 5:49

  • Hola chicos, he bifurcado y modificado el código. Encuentre el enlace a continuación. github.com/nalangekrushna/pef

    – Krish

    13 de septiembre de 2019 a las 4:22


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad