81 votos

¿Cómo puedo detectar y eliminar los paquetes de Python instalados a través de pip?

He instalado accidentalmente paquetes de Python en mi sistema utilizando pip en lugar de apt-get . Lo hice de dos maneras:

  • usando una versión antigua de virtualenv, me olvidé de añadir --no-site-packages al crear el virtualenv - después de eso cuando llamé a pip install los paquetes de Python fueron instalados en el sistema en lugar de en el virtualenv
  • en un virtualenv correctamente configurado, escribí sudo pip install somepackage - el sudo instalado en el sistema en lugar del virtualenv

Me di cuenta de esto porque escribí pip freeze fuera de un virtualenv, y vi algunos paquetes de Python listados que no deberían estar allí. Así que ahora mi pregunta es:

  • cómo identifico todos los paquetes de Python que se han instalado erróneamente en el sistema (es decir, los paquetes de Python que aparecen en el pip freeze lista, pero no se instalaron con apt-get )?
  • ¿cómo las quito?

59voto

Eugene Yokota Puntos 43213

Ubuntu Oneiric (y espero que las versiones más nuevas también) instalan paquetes pip para /usr/local/lib/python2.7/dist-packages y apt paquetes a /usr/lib/python2.7/dist-packages . Así que sólo hay que comprobar el directorio anterior y sudo pip uninstall todos los paquetes que encuentres allí.

14 votos

Fui brutal y emití sudo rm -r /usr/local/lib/python2.7 . Hasta aquí todo bien.

0 votos

@Apteryx, hice lo mismo con /usr/local/lib/python3.5 y después de un tiempo una actualización de update-notifier-common paquete falló debido a la falta de Python 3 six paquete. Terminé instalando six con sudo -H pip3 install six .

7 votos

@Apteryx ¡Maldito sea el hombre! Yo hice lo mismo y ahora todo mi sistema está jodido! porque casi todo en ubuntu depende de Python!

30voto

Pip actualmente ignora los comandos de desinstalación que intentan desinstalar algo que pertenece al SO. No da error, como lo hace con un paquete perdido. Así que, ahora puede desinstalar con el siguiente proceso:

pip freeze > dump.txt

Editar el archivo volcado para eliminar cualquier -e líneas de "instalación editable", todo lo que está después del == signo ( %s;==.*;;g en vim), cambie las nuevas líneas por espacios ( %s;\n; ;g en vim). A continuación, puede desinstalar todos los paquetes que no sean de su propiedad con

cat dump.txt | xargs sudo pip uninstall -y

Tuve que hacer este procedimiento dos veces, porque algunos paquetes se instalaron en ~/.local/lib también.


Una sola línea para lograr esto:

pip freeze | grep -vP '^(?:#|-e\s)' | sed 's;==.*;;g' | xargs -r sudo pip uninstall -y

1 votos

Esta debería ser la respuesta aceptada para mí

5 votos

Si alguien quiere una frase de una sola línea: sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')

5 votos

¡Cuidado! Esto depende de si su sistema operativo incluye una versión especial de pip . En archlinux pip desinstala felizmente los paquetes del sistema. Por otro lado, pip en debian jessie se queja y da errores: Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS

7voto

rck Puntos 121

AFAIK sudo pip install se instalará en /usr/local/lib/pythonVERSION/dist-packages . Es necesario ejecutar sudo pip uninstall para desinstalar paquetes en todo el sistema. Parece que pip freeze busca los metadatos de los paquetes y listará cualquier cosa instalada, tanto de pip como de apt-get, fuera de virtualenvs. Hay -l dentro del entorno virtual para listar los paquetes sólo aplicables a ese entorno virtual, pero parece ser el caso por defecto también dentro del entorno virtual. Creo que puede eliminar los paquetes relacionados en /usr/local/lib/pythonVERSION/dist-packages también, pero no es un método muy conveniente, supongo.

5voto

Mitch Puntos 54051

Para eliminar un paquete instalado mediante pip, basta con pulsar Ctrl + Alt + T en su teclado para abrir el Terminal. Cuando se abra, ejecute el siguiente comando.

pip uninstall < package-name >

Para buscar paquetes

pip search <package you want to search for>

Para determinar qué paquetes de Python fueron instalados por pip, por el freeze que le dará una lista de los paquetes instalados y sus versiones. Yo sugeriría eliminar todas las instancias, y volver a instalar usando el comando sudo apt-get comando

sudo apt-get install python3

1 votos

¿Cómo puedo determinar qué paquetes de Python fueron instalados por pip y cuáles por apt-get? pip uninstall si utilizara sudo pip install en primer lugar?

0 votos

@d3vid pip freeze sólo muestra los paquetes que ha instalado (AFAICS).

1 votos

@oli pip freeze, en preciso al menos, también lista los paquetes instalados por apt, como describen otras respuestas aquí.

0voto

graycrow Puntos 1175

Necesitaba limpiar el espacio en disco de los paquetes de Python de forma segura. Aunque se trata de una limpieza completa de paquetes, necesitaba mover también las versiones de Python para no necesitar los paquetes antiguos. Utilicé lo siguiente para obtener todos los nombres de mis paquetes, omitir las primeras 2 líneas y tomar la primera columna, y desinstalar sin la interacción del usuario:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: