¿La desinstalación de un paquete con "pip" también elimina los paquetes dependientes?
153
Cuando utiliza pippara instalar un paquete, todos los paquetes necesarios 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
1
He encontrado en pip newsgroup que las personas pip no quieren esta funcionalidad, al menos por ahora. ¡Que pena!
Michel Samia
44
@ThomasVanderStichele porque la respuesta no estaría disponible en línea para futuros Googlers :)
Marque el
1
@Mark sería, solo escriba la respuesta a su propia pregunta aquí.
Thomas Vander Stichele
55
@ThomasVanderStichele: no soy el OP, pero he aquí por qué esta es una pregunta y respuesta muy legítima para SO: pipes 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 una pena enorme 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 un cortafuegos, 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
Respuestas:
81
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
Funcionó bien para mí en Python 3 a partir de octubre de 2019.
refrigerios
@ loved.by.Jesus: estoy en Python 3.8.3 y probé y aún veo el comando ejecutado como pip-autoremove(guión no subrayado). pip_autoremoveme da command not found.
bwv549
@ bwv549 Tengo que explicar que lo ejecuté a través de python<version>(cuando se debe especificar la versión). De esa manera, necesitamos adaptar el nombre a pip_autoremove(el guión no está permitido como nombre del paquete). Por ejemplo python3.8 pip_autoremovefunciona pero python3.8 pip-autoremoveno funciona. De lo contrario, como señaló, como un simple comando de terminal pip-autoremove, funciona perfectamente :), aunque solo se utiliza la versión de Python predeterminada del sistema. Gracias por tu mensaje.
amado.por.Jesús
9
He eliminado 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
Aunque técnicamente esta solución elimina con éxito todas las dependencias, como se menciona en las otras respuestas, también desinstala las dependencias que no son exclusivas del destino , incluidas las instaladas desde los paquetes del sistema. Por ejemplo, en mi sistema este script 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 el script pudiera finalizar y luego falló.
sinisterstuf
19
Tenga en cuenta que esto elimina solo las dependencias de nivel inferior, pero no las dependencias de esas dependencias.
tamakisquare
0
He encontrado la solución a pesar de que puede ser un poco difícil de llevar a cabo para algunos.
1er paso (para python3 y linux):
pip3 instalar pip-autoremove
2do paso:
cd /home/usernamegoeshere/.local/bin/
3er paso:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
y cambie todos los pip (s) a pip3 4to paso: ./pip-autoremove packagenamegoeshere
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 una pena enorme 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 un cortafuegos, por lo que no puede asumir la conectividad directa, y debe saber de antemano todo lo que necesitará y su versión, y descargarlo.Respuestas:
No, no desinstala los paquetes de dependencias. Solo elimina el paquete especificado:
Como puede ver, esos paquetes son dependencias
specloud
y todavía están allí, pero no elspecloud
paquete en sí.Como se menciona a continuación, puede instalar y usar la utilidad pip-autoremove para eliminar un paquete más dependencias no utilizadas.
fuente
specloud
paquete?Puede instalar y usar la utilidad pip-autoremove para eliminar un paquete más dependencias no utilizadas.
fuente
pip-autoremove
(guión no subrayado).pip_autoremove
me dacommand not found
.python<version>
(cuando se debe especificar la versión). De esa manera, necesitamos adaptar el nombre apip_autoremove
(el guión no está permitido como nombre del paquete). Por ejemplopython3.8 pip_autoremove
funciona peropython3.8 pip-autoremove
no funciona. De lo contrario, como señaló, como un simple comando de terminalpip-autoremove
, funciona perfectamente :), aunque solo se utiliza la versión de Python predeterminada del sistema. Gracias por tu mensaje.He eliminado con éxito las dependencias de un paquete usando esta línea bash:
esto funcionó en pip 1.5.4
fuente
He encontrado la solución a pesar de que puede ser un poco difícil de llevar a cabo para algunos.
1er paso (para python3 y linux):
pip3 instalar pip-autoremove
2do paso:
cd /home/usernamegoeshere/.local/bin/
3er paso:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
y cambie todos los pip (s) a pip3 4to paso: ./pip-autoremove packagenamegoeshere
Al menos, esto fue lo que funcionó para mí ...
fuente
Puede probar https://github.com/cls1991/pef . Eliminará el paquete con todas sus dependencias.
fuente