Come posso rilevare e rimuovere i pacchetti Python installati tramite pip?


73

Ho installato accidentalmente pacchetti Python sul mio sistema usando pipinvece di apt-get. L'ho fatto in due modi:

  • usando una versione precedente di virtualenv, mi sono dimenticato di aggiungere --no-site-packagesdurante la creazione di virtualenv - dopo quello che ho chiamato pip install, i pacchetti Python erano installati sul sistema piuttosto che virtualenv
  • in un virtualenv correttamente configurato, ho digitato sudo pip install somepackage- il sudo installato sul sistema piuttosto che il virtualenv

Mi è capitato di notare questo perché ho digitato pip freezeal di fuori di virtualenv e ho notato alcuni pacchetti Python elencati che non dovrebbero essere lì. Quindi ora la mia domanda è:

  • come posso identificare tutti i pacchetti Python che sono stati installati erroneamente sul sistema (ovvero i pacchetti Python che appaiono pip freezenell'elenco, ma con i quali non sono stati installati apt-get)?
  • come li rimuovo?

Risposte:


56

Ubuntu Oneiric (e mi aspetto anche le versioni più recenti) installa i pacchetti pip /usr/local/lib/python2.7/dist-packagese i aptpacchetti /usr/lib/python2.7/dist-packages. Quindi basta controllare la precedente directory e sudo pip uninstallogni pacchetto che trovi lì.


12
Sono diventato brutale ed emesso sudo rm -r /usr/local/lib/python2.7. Fin qui tutto bene.
Apteryx,

@Apteryx, ho fatto lo stesso con /usr/local/lib/python3.5, e dopo un po 'un aggiornamento del update-notifier-commonpacchetto fallito a causa della mancanza del sixpacchetto Python 3 . Ho finito l'installazione sixcon sudo -H pip3 install six.
Alexey,

2
@Apteryx, dannazione a te amico! Ho fatto lo stesso e ora tutto il mio sistema è tutto incasinato! perché quasi tutto in Ubuntu si basa su Python!
yukashima huksay,

Ho notato che ora ho un sacco di eseguibili rotti in /usr/local/bin/(qualche tempo fa ho appena rimosso /usr/local/lib/python3.5e passato a conda ).
Alexey,

22

Pip attualmente ignora i comandi di disinstallazione che tentano di disinstallare qualcosa di proprietà del sistema operativo. Non sbaglia, come succede con un pacchetto mancante. Quindi, ora puoi disinstallare con il seguente processo:

pip freeze > dump.txt

Modifica il file scaricato per rimuovere eventuali -erighe di "installazione modificabile", tutto dopo il ==segno ( %s;==.*;;gin vim), scambia le nuove linee con spazi ( %s;\n; ;gin vim). Quindi è possibile disinstallare tutti i pacchetti non di proprietà con

cat dump.txt | xargs sudo pip uninstall -y

Ho dovuto fare questa procedura due volte, perché alcuni pacchetti sono stati installati in ~/.local/libtroppo.


1
Questa dovrebbe essere la risposta accettata per me
Nam G VU

3
Qualcuno dovrebbe desiderare un one-liner senza vita:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez,

4
Attento! Questo dipende dal fatto che il tuo sistema operativo fornisca una versione speciale di pip. Su archlinux pipdisinstalla felicemente i pacchetti di sistema. D'altra parte, pipsu Debian Jessie si lamenta e si lamenta:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.

1
ti serve il sudo? - questa dovrebbe sicuramente essere la risposta accettata
Jonathan l'

6

AFAIK sudo pip installverrà installato su /usr/local/lib/pythonVERSION/dist-packages. È necessario eseguire sudo pip uninstallper disinstallare i pacchetti a livello di sistema. Sembra che pip freezecerchi i metadati del pacchetto ed elencherà tutto ciò che è installato, sia da pip sia da apt-get al di fuori di virtualenvs. Esiste -lun'opzione all'interno dell'ambiente virtuale per elencare i pacchetti applicabili solo a quell'ambiente virtuale ma sembra essere il caso predefinito anche all'interno dell'ambiente virtuale. Penso che puoi semplicemente eliminare i pacchetti correlati anche sul /usr/local/lib/pythonVERSION/dist-packagesmetodo ma non molto conveniente immagino.


5

Per rimuovere un pacchetto installato tramite pip, basta premere Ctrl+ Alt+ Tsulla tastiera per aprire Terminale. Quando si apre, esegui il comando seguente.

pip uninstall < package-name >

Per cercare pacchetti

pip search <package you want to search for>

Per determinare quali pacchetti Python sono stati installati da pip, dal freezecomando, che ti darà un elenco di pacchetti installati e le loro versioni. Suggerirei di rimuovere tutte le istanze e di reinstallare utilizzando il sudo apt-getcomando

sudo apt-get install python3

come posso determinare quali pacchetti Python sono stati installati da pip e quali da apt-get? posso ancora pip uninstallse ho usato sudo pip installin primo luogo?
david.libremone,

@ d3vid pip freezemostra solo i pacchetti installati (AFAICS).
Oli

1
@oli pip freeze, almeno in preciso, elenca anche i pacchetti installati da apt, come descrivono altre risposte qui.
nealmcb,

0

Avevo bisogno di ripulire lo spazio su disco dai pacchetti Python in modo sicuro. Sebbene si tratti di una pulizia completa dei pacchetti, ho dovuto spostare anche le versioni di Python, quindi non avevo bisogno di vecchi pacchetti. Ho usato quanto segue per ottenere tutti i nomi dei miei pacchetti, saltare le prime 2 righe e afferrare la prima colonna e disinstallare senza l'interazione dell'utente:

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

-2

Questo ha a che fare con Homebrew. Non ho avuto problemi con pyodbc sul mio Mac Air fino a quando ho installato Homebrew e l'ho usato per alcune cose. Ho trovato questo thread su Github che termina in una soluzione che ha funzionato per me.

"Se hai Homebrew, installa le intestazioni ODBC:

$ brew install unixodbc

ed esegui nuovamente "pip install pyodbc".

Questo al 100% ha risolto il problema per me e ci è voluto solo un momento. Dagli Un colpo.


forse hai bisogno di pubblicarlo su Ask Different? apple.stackexchange.com
david.libremone,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.