Come disinstallare un pacchetto installato con pip install --user


235

C'è --userun'opzione per pip che può installare un pacchetto Python per utente:

pip install --user [python-package-name]

Ho usato questa opzione per installare un pacchetto su un server per il quale non ho accesso root. Ciò di cui ho bisogno ora è disinstallare il pacchetto installato sull'utente corrente. Ho provato a eseguire questo comando:

pip uninstall --user [python-package-name]

Ma ho:

no such option: --user

Come posso disinstallare un pacchetto con cui ho installato pip install --user, oltre a trovare ed eliminare manualmente il pacchetto?

Ho trovato questo articolo

pip non può eseguire la disinstallazione dalla directory dei pacchetti del sito per utente

che descrive che la disinstallazione dei pacchetti dalla directory utente non è supportata. Secondo l'articolo se è stato implementato correttamente con

pip uninstall [package-name]

il pacchetto che è stato installato verrà cercato anche nelle directory degli utenti. Ma per me resta ancora un problema. E se lo stesso pacchetto fosse installato sia a livello di sistema che per utente? E se qualcuno avesse bisogno di scegliere come target una directory utente specifica?


1
No, devi impostare un virtualenv per utente: gruppo e dare i permessi di sistema adeguati alla cartella che lo contiene.
danius

4
Non è possibile installare un pacchetto a livello di sistema per tutti gli utenti e quindi disinstallarlo selettivamente per alcuni utenti. Se il pacchetto è stato installato così, la --userdisinstallazione senza --userfarà ciò che desideri.
tripleee

@ tripleee: non ho autorizzazioni a livello di sistema e non voglio, devo solo disinstallarlo per utente corrente
Serjik

1
Scopri quale directory non hai i permessi per rimuovere e aggiustane le autorizzazioni o spostala manualmente di lato.
tripleee

Risposte:


207

Dopo averlo testato utilizzando Python 3.5 e pip 7.1.2 su Linux, la situazione sembra essere questa:

  • pip install --user somepackagesi installa in $HOME/.local, e la disinstallazione funziona utilizzando pip uninstall somepackage.

  • Questo è vero indipendentemente dal fatto che somepackagesia installato o meno anche a livello di sistema contemporaneamente.

  • Se il pacchetto è installato in entrambe le posizioni, verrà disinstallato solo quello locale. Per disinstallare il pacchetto a livello di sistema utilizzando pip, prima disinstallarlo localmente, quindi eseguire di nuovo lo stesso comando di disinstallazione, con rootprivilegi.

  • Oltre alla directory di installazione utente predefinita, pip install --target somedir somepackageinstallerà il pacchetto in somedir. Non è possibile disinstallare un pacchetto da tale posizione utilizzando pip. (Ma c'è una richiesta pull un po 'vecchia non fusa su Github che implementa pip uninstall --target.)

  • Poiché le uniche posizioni da cui pipverrà mai eseguita pip uninstallla disinstallazione sono a livello di sistema e utente-locale predefinito, è necessario eseguire la disinstallazione come utente corrispondente per eseguire la disinstallazione dalla directory di installazione locale di un determinato utente.


2
Queste affermazioni sono accurate per eseguire pip all'interno di un ambiente virtuale?
kbolino

nel mio caso la disinstallazione non ha funzionato per pip 9.0.1 il pacchetto è ancora installato in HOME /./ local
Genom

3
Il punto 2 non sembra essere vero sul mio sistema. Ho un pacchetto di sistema jediinstallato in /usr/lib64/python2.7/site-packages/. Quando lo faccio, come un normale utente: pip install --user jedi e poi pip uninstall jedi, pip prova a disinstallare /usr/lib64/python2.7/site-packages/jedie poi esce con Permission denied. Quindi, se --usernon esiste per il comando di disinstallazione, come faccio a dire a disinstallare di non provare a disinstallare /usr/lib64/python2.7/site-packages/jedima ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd

Esattamente lo stesso qui di @AstroFloyd
Nikana Reklawyks il

24

esempio per disinstallare il pacchetto 'oauth2client' su MacOS:

pip uninstall oauth2client

2
Non sono sicuro del motivo per cui ha così tanti voti positivi in ​​quanto è la risposta sbagliata. Questo non specifica affatto il flag --user, se hai pacchetti installati come root e come utente, il pacchetto installato dall'utente rimarrà.
misantroop

1
@misantroop Leggi attentamente le risposte. Indica la stessa cosa della risposta accettata (ma con meno spiegazioni)
user202729

10

Attenzione però, per chi utilizza pip install --user some_pkg all'interno di un ambiente virtuale .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

In questo caso, è necessario disattivare l'ambiente virtuale corrente , quindi utilizzare il corrispondente python/ pipeseguibile per elencare o disinstallare i pacchetti del sito utente:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Tieni presente che questo problema è stato segnalato alcuni anni fa . E sembra che la conclusione corrente sia: --usernon è valido all'interno di un ambiente virtuale pip, poiché la posizione di un utente non ha davvero senso per un ambiente virtuale.


4
Troppo tardi !, ho usato --userall'interno dell'ambiente virtuale, c'è un modo per ripristinarlo ?, perché pip listnon funziona ....
jnfran92

3
"E sembra che la conclusione corrente sia: --user non è valido all'interno del pip di un ambiente virtuale, poiché la posizione di un utente non ha davvero senso per un ambiente virtuale." Concordato. Le installazioni dell'utente annullano l'intero scopo di un ambiente virtuale. Sfortunatamente ci sono molti cattivi esempi di persone che lo fanno là fuori.
Stephen Bosch

9

Penso che sia possibile disinstallare i pacchetti installati con --userflag. Questo ha funzionato per me;

pip freeze --user | xargs pip uninstall -y

Per python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Ma in qualche modo questi comandi non disinstallano setuptools e pip. Dopo questi comandi (se vuoi veramente pulire Python) puoi cancellarli con;

pip uninstall setuptools && pip uninstall pip


2
Questa è una soluzione elegante che ha funzionato bene per me.
Stephen Bosch

1
bello, disinstalla tutti i pacchetti che ho mai installato con la --userbandiera! ora per reinstallarli nel mio ambiente Anaconda ...
Conor Cosnett

2

La risposta non è ancora possibile . Devi rimuoverlo manualmente.


Durante l'installazione di un pacchetto, c'era un traceback. La disinstallazione non ha mai funzionato dopo.
syam

Come faccio a elencare tutti i file pip installati per un determinato pacchetto (in modo da poterli rimuovere)?
AstroFloyd

È effettivamente impossibile perché pip esegue setup.py che esegue codice esterno. Fino a quando setup.py non sarà completamente rimosso dimenticalo, probabilmente entro il 2022 lo sarà.
sorin

2

Come menzionato da @ thomas-lotze, attualmente pip tooling non lo fa poiché non esiste un'opzione --user corrispondente. Ma quello che trovo è che posso controllare in ~ / .local / bin e cercare il pip #. # Specifico che mi sembra corrisponda all'opzione --user.

Nel mio caso:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

Quindi disinstalla con la versione pip specifica.


stackoverflow.com/a/11250821/14420 per vedere la ricetta per la disinstallazione del bagno, ad esempio ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -yper tutto tranne i pacchetti installati in modalità modificabile
matt wilkie

1

Sto eseguendo Anaconda versione 4.3.22 e un ambiente python3.6.1 e ho avuto questo problema. Ecco la cronologia e la correzione:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

L'ho fatto nel mio ambiente python3.6 e ho ricevuto questo errore.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Successivamente, ho provato a scaricare python3.6 e inserire python3.dll nella cartella e in varie cartelle. niente è cambiato.

alla fine, questo lo ha risolto:

pip uninstall opencv-python

(l'altra versione di conda-forge è ancora installata) Ciò ha lasciato solo la versione conda, e funziona in 3.6.

>>>import cv2
>>>

Lavorando!

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.