Wie deinstalliere ich ein Python-Paket, das mit distutils installiert wurde?


92

Können Sie das Verzeichnis einfach aus Ihrer Python-Installation löschen oder müssen Sie noch Dateien löschen?

Antworten:


45

Dies hängt von den Optionen ab, an die Sie übergeben, installund vom Inhalt der Konfigurationsdateien von distutils auf dem System / im Paket. Ich glaube nicht, dass Dateien außerhalb der auf diese Weise angegebenen Verzeichnisse geändert werden.

Insbesondere hat distutils derzeit keinen Deinstallationsbefehl .

Es ist auch bemerkenswert, dass das Löschen eines Pakets / Eies Abhängigkeitsprobleme verursachen kann - Dienstprogramme wie der easy_installVersuch, solche Probleme zu beheben.


4
Können Sie dies bitte aktualisieren, um den Teil der verbleibenden Dateien direkt zu beantworten?
S.Lott

Ich dachte, ich hätte es getan - es werden keine Dateien außerhalb der Verzeichnisse erstellt, die in der distutils-Konfiguration angegeben sind, und Installationsflags, sodass in diesen Verzeichnissen "verweilende" Dateien vorhanden sind. Es variiert von Paket zu Paket.
cdleary

2
@cdleary: Danke, aber ich hatte gehofft, Sie würden Ihre Antwort einfach klarstellen und verstärken und keinen langen Kommentarthread hinzufügen.
S.Lott

2
@ S.Lott: Entschuldigung, aber ich weiß nicht, welchen Teil der Antwort Sie klären möchten - können Sie genauer sein?
cdleary

1
msg139773 Datum: 2011-07-04 14:35 distutils2 / package bietet jetzt eine Entfernungsfunktion und einen Befehl zum Entfernen von pysetup.
Edward

19

Die drei Dinge, die installiert werden und die Sie löschen müssen, sind:

  1. Pakete / Module
  2. Skripte
  3. Datei

Jetzt auf meinem Linux-System leben diese in:

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

Auf einem Windows-System befinden sie sich jedoch eher vollständig im Python-Verteilungsverzeichnis. Ich habe keine Ahnung von OSX, außer dass es eher so ist, dem Linux-Muster zu folgen.


14

Ein weiterer Hack auf der Basis von Zeitstempeln:

  1. Erstellen Sie einen Anker: touch /tmp/ts
  2. Installieren Sie das zu entfernende Paket erneut: python setup.py install --prefix=<PREFIX>
  3. Entfernen Sie Dateien, die aktueller als die Ankerdatei sind: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1. Ich mag das nicht | xargs rm -r. Ich empfehle, jede Datei manuell durchzugehen . Auf ext4 (und anderen Dateisystemen) werden auch findalle Ordner aufgelistet. Wenn Ihr Präfix war /usr, werden Sie löschen/usr/* .
Mateen Ulhaq

8

Ja, es ist sicher, einfach alles zu löschen, was distutils installiert hat. Das gilt für installierte Ordner oder .egg-Dateien. Natürlich funktioniert alles, was von diesem Code abhängt, nicht mehr.

Wenn Sie möchten, dass es wieder funktioniert, installieren Sie es einfach erneut.

Übrigens, wenn Sie Distutils verwenden, sollten Sie auch die Multi-Version-Funktion in Betracht ziehen. Sie können mehrere Versionen eines einzelnen Pakets installieren. Das bedeutet, dass Sie keine alte Version eines Pakets löschen müssen, wenn Sie einfach eine neuere Version installieren möchten.


5

In Ubuntu 12.04 habe ich festgestellt, dass der einzige Ort, an dem Sie standardmäßig suchen müssen, unter ist

/usr/local/lib/python2.7/

Und entfernen Sie einfach den zugehörigen Ordner und die Datei, falls vorhanden!


Manchmal in / usr / lib / python <2.7 / 3.6>
Vineet

4

Wenn dies zu Test- und / oder Entwicklungszwecken dient, hat setuptools eine Entwicklung , der jedes Mal aktualisiert wird, wenn Sie eine Änderung vornehmen (Sie müssen also nicht jedes Mal deinstallieren und neu installieren, wenn Sie eine Änderung vornehmen). Mit diesem Befehl können Sie das Paket auch deinstallieren.

Wenn Sie dies verwenden, bleibt alles, was Sie als Skript deklarieren, als verweilende Datei zurück.


4

install --record + xargs rm

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

Entfernt alle Dateien und hinterlässt leere Verzeichnisse.

Das ist nicht ideal, es sollte ausreichen, um Paketkonflikte zu vermeiden.

Und dann können Sie den Job manuell beenden, wenn Sie möchten, indem Sie lesen files.txt , oder mutiger sein und auch das Entfernen leerer Verzeichnisse automatisieren.

Ein sicherer Helfer wäre:

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
)

Getestet in Python 2.7.6, Ubuntu 14.04.


3

für Python in Windows:

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

2

Ich habe gerade ein Python-Paket deinstalliert, und obwohl ich nicht sicher bin , ob ich es perfekt gemacht habe, bin ich ziemlich zuversichtlich.

Ich begann damit, eine Liste von allen zu bekommen Python-bezogenen Dateien zu erhalten, sortiert nach Datum, unter der Annahme, dass alle Dateien in meinem Paket mehr oder weniger den gleichen Zeitstempel haben und keine anderen Dateien.

Zum Glück habe ich Python unter installiert /opt/Python-2.6.1; Wenn ich den Python verwendet hätte, der mit meiner Linux-Distribution geliefert wird, hätte ich alles durchsuchen müssen /usr, was lange gedauert hätte.

Dann habe ich nur diese Liste untersucht und mit Erleichterung festgestellt, dass alles, was ich nuklearisieren wollte, aus einem Verzeichnis /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/und einer Datei bestand /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info.

Also habe ich diese einfach gelöscht.

So habe ich die nach Datum sortierte Liste der Dateien erhalten:

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

(Ich denke, das muss übrigens GNU "find" sein; der Geschmack, den Sie unter OS X erhalten, weiß nichts über "-printf '% T @'")

Ich benutze das die ganze Zeit.


2

Für Windows 7

Systemsteuerung -> Programme -> Deinstallieren

, dann

Wählen Sie das zu entfernende Python-Paket aus.


@Mauricio Ich sehe keine alten Versionen in der Liste, aber ich kann die Eidateien in den Site-Paketen sehen. Ist das ein Problem?

1

Unter Mac OSX, manuell löschen Sie diese 2 - Verzeichnisse unter Ihrem pathToPython / site-packages / funktioniert:

  • {Paketnamen}
  • {packageName} - {version} -info

Zum Beispiel, um pyasn1 zu entfernen , ein von distutils installiertes Projekt:

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

So finden Sie heraus, wo sich Ihre Site-Pakete befinden:

python -m site

1
Funktioniert wie erwartet.
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.

Dann tippe ich:

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

Getan!


1
Bitte versuchen Sie zu erklären, was Sie tun und warum, anstatt nur die Konsolenausgabe anzuzeigen.
Headhunter Xamd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.