disinstallazione di python setup.py


787

Ho installato un pacchetto Python con python setup.py install.

Come lo disinstallo?


52
La risposta accettata è obsoleta. Usa pip uninstall <your_package>. Vedi stackoverflow.com/questions/1231688/… .
Gioacchino W,

21
pip Uninstall non è più una risposta valida. Ecco la prova. [sri @ localhost python] $ pip disinstallazione foo DEPRECATION: la disinstallazione di un progetto installato distutils (foo) è stata deprecata e verrà rimossa in una versione futura. Ciò è dovuto al fatto che la disinstallazione di un progetto distutils disinstallerà solo parzialmente il progetto.
shrewmouse,

@shrewmouse che non mostra più.
JC Rocamonde,

@JCRocamonde Con un pacchetto che ho creato, l'ultima versione di pip mostra che It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.questo è ancora un problema.
Josh

@Josh nella parte superiore del file setup.py fai "da setuptools import setup" invece di "from distutils.core import setup".
bigjake,

Risposte:


977

Nota: evitare l' python setup.py installusopip install .

Devi rimuovere tutti i file manualmente e annullare anche qualsiasi altra operazione eseguita manualmente dall'installazione.

Se non conosci l'elenco di tutti i file, puoi reinstallarlo con l' --recordopzione e dare un'occhiata all'elenco che produce.

Per registrare un elenco di file installati, è possibile utilizzare:

python setup.py install --record files.txt

Una volta che si desidera disinstallare, è possibile utilizzare xargs per eseguire la rimozione:

xargs rm -rf < files.txt

O se stai usando Windows, usa Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Quindi eliminare anche la directory contenente, ad esempio /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/on macOS. Non ha file, ma Python importerà comunque un modulo vuoto:

>>> import my_module
>>> my_module.__file__
None

Una volta eliminato, Python mostra:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

6
Se questo non funziona, aggiungi sudo come segue:cat files.txt | xargs sudo rm -rf
saroele

21
Questo incasinerà i file con spazi. Vedi la mia risposta qui sotto: stackoverflow.com/a/25209129/14456
Ian Kelling

1
Come posso reinstallare il pacchetto in cui ho il codice sorgente di usare setup.py da esso?
ア レ ッ ク ス

5
Questo lascia anche directory vuote al loro posto.
Dilawar,

3
Ciao, ho provato il tuo suggerimento per alcuni file quando provo cat files.txt | xargs rm -rf indica l'autorizzazione negata, anche in modalità sudo, ad esempio per / usr / local / bin / pydoc o / usr / local / bin / idle Qualche idea sul perché?

212

Per me, il seguente funziona principalmente:

avere pip installato, ad es .:

$ easy_install pip

Verifica, come viene chiamato il tuo pacchetto installato dal punto di vista pip:

$ pip freeze

Questo dovrà elencare i nomi di tutti i pacchetti che hai installato (e che sono stati rilevati da pip). Il nome può essere lungo, quindi utilizzare solo il nome del pacchetto mostrato in corrispondenza di e dopo #egg=. Nella maggior parte dei casi puoi anche ignorare la parte della versione (qualunque cosa segue ==o -).

Quindi disinstallare il pacchetto:

$ pip uninstall package.name.you.have.found

Se chiede conferma sulla rimozione del pacchetto, allora sei un ragazzo fortunato e verrà rimosso.

pip rileverà tutti i pacchetti che sono stati installati da pip. Rileverà inoltre la maggior parte dei pacchetti installati tramite easy_install o setup.py, ma in alcuni rari casi potrebbe non riuscire.

Ecco un esempio reale dal mio test locale con pacchetto denominato ttr.rdstmcsu MS Windows.

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Modifica 20/05/2015

Tutto ciò che è scritto sopra vale ancora, comunque, ci sono piccole modifiche disponibili ora.

Installa pip in Python 2.7.9 e Python 3.4

Le versioni recenti di Python includono un pacchetto che ensurepipconsente di installare pip anche quando si è offline:

$ python -m surepip --upgrade

Su alcuni sistemi (come Debian Jessie) questo non è disponibile (per evitare di interrompere l'installazione di Python di sistema).

Utilizzando grepofind

Gli esempi sopra presuppongono che tu abbia grepinstallato. Avevo (al momento avevo MS Windows sulla mia macchina) installato un set di utility linux (incl. Grep). In alternativa, usa MS Windows nativo findo semplicemente ignora quel filtro e trova il nome in un elenco un po 'più lungo di pacchetti python rilevati.


1
quale strumento / versione di packaging stai usando per far funzionare tutto questo? ( distutils, distribute, Ecc ...)
Ciro Santilli郝海东冠状病六四事件法轮功

1
Io uso setuptools. Puoi controllare bitbucket.org/vlcinsky/ttr.aws.utils.s3 (che non è perfetto). Ad ogni modo, sono abbastanza scontento dell'uso dei pacchetti dello spazio dei nomi, a volte l'importazione viene interrotta senza motivo visibile. Ma è un'altra storia.
Jan Vlcinsky,

1
correggendo me stesso. Anche se lo importazione setuptools, infatti lo uso distribute. Un'altra lezione: quando installi il mio pacchetto da pypi e pianifichi di svilupparne un altro condividendo localmente lo stesso spazio dei nomi, non usare $ pip install <the package> , usare $ easy_install <the package>, altrimenti si verificano conflitti durante l'importazione del pacchetto di sviluppo.
Jan Vlcinsky,

1
Per aiutare gli altri: poiché non sono root, installo tutto a casa mia. Ecco cosa ho fatto easy_install --user --prefix=$HOME pip. Poi ho aggiunto il seguente nel mio PATH: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/bine ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre

3
Questa dovrebbe essere una risposta accettata, poiché è molto più semplice e pip viene comunque fornito con Python. È semplice da usare nel prompt dei comandi / terminale - pip uninstall moduleo python -m pip uninstall moduledovrebbe funzionare. Inoltre dovrebbe essere multipiattaforma, come fa parte di Python.
Edward,

81

La risposta n. 1 ha problemi:

  • Non funzionerà su Mac.
  • Se viene installato un file che include spazi o altri caratteri speciali, il xargscomando non riuscirà ed eliminerà tutti i file / directory che corrispondono alle singole parole.
  • l'in -rin rm -rfnon è necessario e nella peggiore delle ipotesi potrebbe eliminare cose che non si desidera.

Invece, per unix-like:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

E per Windows:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Ci sono anche problemi irrisolvibili con la disinstallazione setup.pydell'installazione che non ti disturberanno in un caso tipico. Per una risposta più completa, consulta questa pagina wiki:

https://ofswiki.org/wiki/Uninstalling_setup.py_install


3
Perché non lasci un suggerimento sotto quello votato? Si noti che questi "gravi problemi" riguardano casi angolari.
lpapp,

17
Ho lasciato un commento sotto quello votato. Il mio commento è sepolto sotto un link "carica più commenti" su cui poche persone fanno clic. Ho anche fatto la mia risposta perché avevo molto altro da dire, vale a dire. il link nella mia risposta. Inoltre, il caso d'angolo non sarebbe il primo termine che mi viene in mente quando un file contiene uno spazio.
Ian Kelling,

Per quello che vale, penso che questo non andrà a buon fine sui nomi di file che contengono newline :) Se i manutentori di pacchetti sono così malvagi, spero di non scoprirlo mai.
Jack O'Connor,

2
Su OS X Mavericks, almeno, xargs non ha l'opzione -d. Perché? Perché Apple ti ama. Comunque questo ha gli stessi effetti di cui sopra, ed è sicuro con spazi e simili. È specifico di Bash, però. Dopo aver eseguito l'installazione con --record in files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski il

2
@IanKelling L'incorporazione di variabili all'interno printfdella stringa di formato fallirà se la stringa contiene ad es. %O \caratteri. Fornisci sempre una stringa di formato: printf '%s\0' "$line"(evita anche l'eco). Anche se puoi evitare ulteriormente il ciclo semplicemente usandotr '\n' '\0' < files.txt | xargs -0 rm -f
geirha

39

Prima registra i file che hai installato. Puoi ripetere questo comando, anche se hai eseguito in precedenza setup.py install:

python setup.py install --record files.txt

Quando vuoi disinstallare puoi semplicemente:

sudo rm $(cat files.txt)

Questo funziona perché il comando rm accetta un elenco di file separati da spazi bianchi da eliminare e il record di installazione è proprio tale elenco.


C'è un modo per verificare non solo se è stato il mio programma a installarlo, ma anche se da allora nessun'altra applicazione ha usato questa risorsa? Ad esempio, ho installato uno strumento, per farlo, ho dovuto installare diverse librerie, forse alcune erano già installate (il che significa che non riesco a rimuovere nel processo di disinstallazione) ma non riesco a rimuovere nulla che altre applicazioni non è stato installato perché la mia libreria era stata installata per prima ..
Gabrielle,

19

Ora python ti dà la possibilità di installare pipdurante l'installazione (io sono su Windows, e almeno python lo fa per Windows!). Considerando che hai scelto di installare pipdurante l'installazione di Python (in realtà non devi scegliere perché è predefinito), pipè già installato per te. Quindi, digita il pipprompt dei comandi, dovresti vedere un aiuto. È possibile trovare le istruzioni per l'uso necessarie lì. Ad esempio, pip listmostra l'elenco dei pacchetti installati. Puoi usare

pip uninstall package_name

per disinstallare qualsiasi pacchetto che non desideri più. Maggiori informazioni qui (documentazione pip) .


8

Il modo pigro: disinstalla semplicemente dal menu di installazione di Windows (se stai usando Windows) o dal comando rpm, a condizione che tu lo abbia reinstallato dopo aver creato un pacchetto di distribuzione.

Per esempio,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" è ovviamente un esempio).


4
Non so se mi piace, ma ottieni un punto per il pensiero ortogonale. :)
Lennart Regebro,

Ad essere onesti, non sono sicuro neanche da qui "il modo pigro" ;-) Ma ho pensato di menzionare che era possibile creare un programma di installazione più "standard". È strano che setup.py non fornisca un modo pulito per rimuovere i pacchetti.
RedGlyph,

1
Le disinstallazioni richiedono registri centralizzati dei pacchetti installati e dei relativi file, e non ce n'è uno. Sono in corso discussioni su come migliorare questa storia e potrebbe essere risolta in Python 2.7 / 3.2 o 2.8 / 3.3 o giù di lì.
Lennart Regebro,

1
@Lennart: non ci sarà almeno Python 2.8 che è l'attuale dichiarazione ufficiale
Piotr Owsiak,

2
@PiotrOwsiak: Sì, ma non era questa la dichiarazione allora. 2.8 era ancora una possibilità a quel tempo e rimase così in piedi fino all'approvazione del PEP 404, credo alla fine dell'anno scorso.
Lennart Regebro,

6

Vai alla directory del pacchetto python e rimuovi il tuo file .egg, ad esempio: In python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

In python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/


1
Funziona, a meno che l'installazione non abbia installato file al di fuori del pacchetto, cosa che alcuni fanno, come setuptools che installa e il comando easy_install.
Lennart Regebro,

3
Normalmente, se un pacchetto fosse installato usando python setup.py come specificato dall'OP, non ci sarebbe un uovo. OTOH, se ce n'è uno perché easy_install è stato usato, il modo documentato per disinstallare i pacchetti è usare easy_install -m prima di cancellare il file egg; in caso contrario, i gusci d'uovo potrebbero essere lasciati indietro nel file easy-install.pth.
Ned Deily,

5

Non esattamente rispondendo alla domanda, ma qualcosa che mi aiuta ogni giorno:

Installa i tuoi pacchetti con

pip install .

Questo inserisce il pacchetto $HOME/.local. Disinstallare con

pip uninstall <package_name>

1
pip unistall .non ha funzionato per me, ma pip uninstall <package_name>grazie!
Danijel,

4

Probabilmente puoi farlo in alternativa: -

1) Ottieni la versione di Python -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> Il comando sopra ti dà la versione attuale di Python che è 2.4.3

2) Ottieni la directory di installazione di Python -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> Dal comando sopra puoi ottenere la directory di installazione che è - /usr/lib/python2.4/site-packages

3) Da qui è possibile rimuovere i pacchetti e i file delle uova di Python

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Questo ha funzionato per me .. E sono stato in grado di disinstallare il pacchetto che mi preoccupava :)


3

Penso che tu possa aprire setup.py, individuare il nome del pacchetto e quindi chiedere a pip di disinstallarlo.

Supponendo che il nome sia disponibile in una variabile 'METADATA':

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")

1

Estendendo ciò che Martin ha detto, registrare l'output di installazione e un po 'di scripting bash fa il trucco abbastanza bene. Ecco cosa faccio ...

for i in $(less install.record);
sudo rm $i;
done;

E presto Disinstallato.


2
Molto più facile scrivere questo come sudo xargs rm -v < install.record.
poolie,

1

Se hai ancora dei file che dovrebbero essere eliminati dopo aver reinstallato un pacchetto, assicurati che anche la cartella buildsia eliminata. Pertanto, supponendo che pkgsia il pacchetto che si desidera eliminare:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Esegui l'allenamento per python3 ed elimina il pacchetto e il suo file * .egg-info


1

At {virtualenv}/lib/python2.7/site-packages/(se non si utilizza virtualenv quindi {system_dir}/lib/python2.7/dist-packages/)

  • Rimuovere il file uovo (ad es distribute-0.6.34-py2.7.egg )
  • Se ce n'è uno dal file easy-install.pth, rimuovere la riga corrispondente (dovrebbe essere un percorso alla directory di origine o di un file uovo).

0

Avevo eseguito "python setup.py install" ad un certo punto in passato accidentalmente nel mio ambiente globale, e ho avuto molte difficoltà a disinstallarlo. Queste soluzioni non hanno aiutato. "pip uninstall" non ha funzionato con "Impossibile disinstallare 'splunk-appinspect'. Nessun file trovato da disinstallare." "sudo pip uninstall" non ha funzionato "Impossibile disinstallare il requisito splunk-appinspect, non installato". Ho provato a disinstallare pip, eliminare la cache pip, cercare il pacchetto sul mio disco rigido, ecc ...

"pip show" alla fine mi ha portato alla soluzione, la "Posizione:" puntava a una directory e la ridenominazione di quella directory ha causato la rimozione del pacchetto dall'elenco di pip. Ho rinominato la directory di nuovo, e non è riapparso nell'elenco di pip, e ora posso reinstallare il mio pacchetto in un virtualenv.


0

Ho eseguito python setup.py installuna volta nel mio PyCharm, installa tutti i pacchetti nel mio ambiente di conda base. Più tardi, quando voglio rimuovere tutti questi pacchetti, pip uninstallnon funziona. Ho dovuto eliminarli manualmente da /anaconda3/lib/python3.7/site-packages :(

Quindi non vedo il motivo per cui usano setup.py invece di scrivere il file requisito.txt. Il file dei requisiti può essere utilizzato per installare pacchetti in ambiente virtuale e non interferirà con i pacchetti di sistema Python.


-1

Potrebbe essere meglio rimuovere i file correlati usando bash per leggere i comandi, come il seguente:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"

Questa è una copia di una risposta precedente esistente.
Karl Richter
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.