¿Cómo detecto y elimino los paquetes de Python instalados a través de pip?

73

Accidentalmente instalé paquetes de Python en mi sistema usando en piplugar de apt-get. Hice esto de dos maneras:

  • usando una versión anterior de virtualenv, olvidé agregarlo --no-site-packagesal crear virtualenv; después de eso, cuando llamé pip install, los paquetes de Python se instalaron en el sistema en lugar del 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 freezefuera de un virtualenv y vi algunos paquetes de Python enumerados que no deberían estar allí. Entonces ahora mi pregunta es:

  • ¿Cómo identifico todos los paquetes de Python que se instalaron por error en el sistema (es decir, los paquetes de Python que aparecen en la pip freezelista, pero que no se instalaron apt-get)?
  • ¿Cómo los elimino?
david.libremone
fuente

Respuestas:

56

Ubuntu Oneiric (y espero versiones más nuevas también) instala paquetes pip /usr/local/lib/python2.7/dist-packagesy aptpaquetes en /usr/lib/python2.7/dist-packages. Así que simplemente verifique el directorio anterior y sudo pip uninstallcada paquete que encuentre allí.

Capi Etheriel
fuente
12
Fui brutal y emití sudo rm -r /usr/local/lib/python2.7. Hasta aquí todo bien.
Apteryx
@Apteryx, hice lo mismo con /usr/local/lib/python3.5, y después de un tiempo una actualización del update-notifier-commonpaquete falló debido a la falta del sixpaquete Python 3 . Terminé instalando sixcon sudo -H pip3 install six.
Alexey
2
@Apteryx dios maldito seas hombre! ¡Hice lo mismo y ahora todo mi sistema está jodido! ¡porque casi todo en ubuntu depende de python!
yukashima huksay
Me di cuenta de que ahora tengo un montón de ejecutables rotos /usr/local/bin/(hace un tiempo simplemente eliminé/usr/local/lib/python3.5 y cambié a conda ).
Alexey
22

Pip actualmente ignora los comandos de desinstalación que intentan desinstalar algo propiedad del sistema operativo. No se produce un error, como lo hace con un paquete faltante. Entonces, ahora puede desinstalar con el siguiente proceso:

pip freeze > dump.txt

Edite el archivo volcado para eliminar las -elíneas de "instalación editable", todo después del ==signo ( %s;==.*;;gen vim), cambie las nuevas líneas por espacios ( %s;\n; ;gen vim). Luego 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 también se instalaron algunos paquetes ~/.local/lib.

Henry Schreiner
fuente
1
Esta debería ser la respuesta aceptada para mí
Nam G VU
3
En caso de que alguien quiera una frase sin sentido:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez
44
¡Cuidado! Esto depende de si su sistema operativo incluye una versión especial de pip. En archlinux pipfelizmente desinstala los paquetes del sistema. Por otro lado, pipen debian jessie se queja y comete errores:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
1
necesitas el sudo? - Esta definitivamente debería ser la respuesta aceptada
Jonathan
6

AFAIK sudo pip installse instalará en /usr/local/lib/pythonVERSION/dist-packages. Debe ejecutar sudo pip uninstallpara desinstalar paquetes en todo el sistema. Parece que pip freezebusca los metadatos del paquete y enumerará todo lo instalado, es decir, tanto desde pip como desde apt-get fuera de virtualenvs. Existe una -lopción dentro del entorno virtual para enumerar los paquetes solo aplicables a ese entorno virtual, pero parece ser el caso predeterminado también dentro del entorno virtual. Creo que también puedes eliminar paquetes relacionados, /usr/local/lib/pythonVERSION/dist-packagespero supongo que no es un método muy conveniente.

sagarchalise
fuente
5

Para eliminar un paquete instalado a través de pip, simplemente presione Ctrl+ Alt+ Ten su teclado para abrir 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 se instalaron mediante pip, mediante el freezecomando, que le dará una lista de los paquetes instalados y sus versiones. Sugeriría eliminar todas las instancias y volver a instalar usando el sudo apt-getcomando

sudo apt-get install python3
Mitch
fuente
¿Cómo determino qué paquetes de Python fueron instalados por pip y cuáles por apt-get? ¿puedo seguir pip uninstallsi lo usé sudo pip installen primer lugar?
david.libremone
@ d3vid pip freezesolo muestra los paquetes que instaló (AFAICS).
Oli
1
@oli pip freeze, al menos con precisión, también enumera los paquetes instalados por apt, como lo describen otras respuestas aquí.
nealmcb
0

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

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

Esto tiene algo que ver con Homebrew. No tuve problemas con pyodbc en mi Mac Air hasta que instalé Homebrew y lo usé para algunas cosas. Encontré este hilo en github que termina en una solución que funcionó para mí.

"Si tiene Homebrew, simplemente instale los encabezados ODBC:

$ brew install unixodbc

y ejecute "pip install pyodbc" nuevamente ".

Esto 100% resolvió el problema para mí y solo tomó un momento. Dale un tiro.

Pogo
fuente
tal vez necesites publicar esto en Ask Different? apple.stackexchange.com
david.libremone