Come si disinstalla un pacchetto python che è stato installato utilizzando distutils?


92

Puoi semplicemente eliminare la directory dalla tua installazione di Python o ci sono file persistenti che devi eliminare?

Risposte:


45

Varia in base alle opzioni a cui si passa installe al contenuto dei file di configurazione di distutils sul sistema / nel pacchetto. Non credo che alcun file venga modificato al di fuori delle directory specificate in questi modi.

In particolare, distutils non ha un comando di disinstallazione in questo momento.

È anche interessante notare che l'eliminazione di un pacchetto / uovo può causare problemi di dipendenza - utilità come il easy_installtentativo di alleviare tali problemi.


4
Potete aggiornarlo per indirizzare direttamente la parte persistente dei file della domanda?
S.Lott

Pensavo di averlo fatto - nessun file viene creato al di fuori delle directory specificate dalla configurazione di distutils e dai flag di installazione, quindi qualsiasi file "persistente" esisterà in queste directory. Varia da pacchetto a pacchetto.
cdleary

2
@cdleary: grazie, ma, speravo che avresti semplicemente chiarito e rafforzato la tua risposta, senza aggiungere un lungo thread di commenti.
S.Lott

2
@ S.Lott: Scusa, ma non so su quale parte della risposta vuoi chiarimenti - puoi essere più specifico?
cdleary

1
msg139773 Data: 2011-07-04 14:35 distutils2 / packaging ora fornisce una funzione di rimozione e un comando di rimozione di pysetup.
Edward

19

Le tre cose che vengono installate e che dovrai eliminare sono:

  1. Pacchetti / moduli
  2. Script
  3. File di dati

Ora sul mio sistema Linux questi vivono in:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Ma su un sistema Windows è più probabile che siano interamente all'interno della directory di distribuzione di Python. Non ho idea di OSX tranne che è più simile a seguire il modello Linux.


14

Un altro trucco basato sul timestamp:

  1. Crea un'ancora: touch /tmp/ts
  2. Reinstallare il pacchetto da rimuovere: python setup.py install --prefix=<PREFIX>
  3. Rimuovi i file più recenti del file di ancoraggio: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1. Non mi piace il file | xargs rm -r. Consiglio di esaminare manualmente ogni file . Su ext4 (e altri file system), findverranno elencate anche tutte le cartelle . Se il tuo prefisso era /usr, lo cancellerai/usr/* .
Mateen Ulhaq

8

Sì, è sicuro eliminare semplicemente tutto ciò che distutils ha installato. Questo vale per le cartelle installate o per i file .egg. Naturalmente tutto ciò che dipende da quel codice non funzionerà più.

Se vuoi farlo funzionare di nuovo, è sufficiente reinstallarlo.

A proposito, se stai usando distutils considera anche l'utilizzo della funzione multi-versione. Ti consente di avere più versioni di ogni singolo pacchetto installato. Ciò significa che non è necessario eliminare una vecchia versione di un pacchetto se si desidera semplicemente installare una versione più recente.


5

In Ubuntu 12.04, ho scoperto che l'unico posto in cui devi guardare per impostazione predefinita è sotto

/usr/local/lib/python2.7/

E rimuovi semplicemente la cartella e il file associati, se ce n'è uno!


A volte in / usr / lib / python <2.7 / 3.6>
Vineet

4

Se questo è per scopi di test e / o sviluppo, setuptools ha uno sviluppo comando di che si aggiorna ogni volta che si apporta una modifica (quindi non è necessario disinstallare e reinstallare ogni volta che si apporta una modifica). E puoi disinstallare il pacchetto anche usando questo comando.

Se lo usi, tutto ciò che dichiari come script verrà lasciato come file persistente.


4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

rimuove tutti i file e lascia le directory vuote.

Non è l'ideale, dovrebbe essere sufficiente per evitare conflitti tra pacchetti.

E poi puoi finire il lavoro manualmente se vuoi leggendo files.txt, o essere più coraggioso e automatizzare anche la rimozione delle directory vuote.

Un aiuto sicuro sarebbe:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Testato in Python 2.7.6, Ubuntu 14.04.


3

per Python in Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?

2

Ho appena disinstallato un pacchetto Python e, anche se non sono sicuro di averlo fatto perfettamente, sono ragionevolmente fiducioso.

Ho iniziato ottenendo un elenco di tutti i file relativi a python, ordinati per data, partendo dal presupposto che tutti i file nel mio pacchetto avranno più o meno lo stesso timestamp e nessun altro file lo farà.

Fortunatamente, ho installato Python sotto /opt/Python-2.6.1; se avessi usato il Python fornito con la mia distribuzione Linux, avrei dovuto setacciarlo tutto /usr, il che avrebbe richiesto molto tempo.

Poi ho esaminato quella lista, e notato con sollievo che tutte le cose che ho voluto Nuke consisteva in una directory, /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/e un file, /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info.

Quindi li ho appena cancellati.

Ecco come ho ottenuto l'elenco dei file ordinato per data:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(A proposito, penso che debba essere GNU "find"; il sapore che ottieni su OS X non conosce "-printf '% T @'")

Lo uso sempre .


2

Per Windows 7,

Pannello di controllo -> Programmi -> Disinstalla

, poi

scegli il pacchetto Python da rimuovere.


@Mauricio Non vedo le vecchie versioni nella lista ma posso vedere i file uovo nei pacchetti del sito. Questo è un problema?

1

Su Mac OSX, elimina manualmente queste 2 directory nel tuo pathToPython / site-packages / funzionerà:

  • {nome del pacchetto}
  • {packageName} - {version} -info

ad esempio, per rimuovere pyasn1 , che è un progetto installato da distutils:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Per scoprire dove si trovano i pacchetti del tuo sito:

python -m site

1
Funziona come previsto.
c1377554

-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. 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.

Quindi digito:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Fatto!


1
Prova a spiegare cosa stai facendo e perché invece di mostrare solo l'output della console.
Headhunter Xamd
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.