python setup.py deinstallieren

786

Ich habe ein Python-Paket mit installiert python setup.py install.

Wie deinstalliere ich es?

Flybywire
quelle
52
Die akzeptierte Antwort ist veraltet. Verwenden Sie pip uninstall <your_package>. Siehe stackoverflow.com/questions/1231688/… .
Joachim W
21
Die Deinstallation von pip ist keine gültige Antwort mehr. Hier ist der Beweis. [sri @ localhost python] $ pip deinstalliert foo DEPRECATION: Die Deinstallation eines installierten distutils-Projekts (foo) ist veraltet und wird in einer zukünftigen Version entfernt. Dies liegt an der Tatsache, dass durch die Deinstallation eines distutils-Projekts das Projekt nur teilweise deinstalliert wird.
Spitzmaus
@Shrewmouse, die nicht mehr angezeigt wird.
JC Rocamonde
@JCRocamonde Mit einem Paket, das ich erstellt habe, wird die neueste Version von pip angezeigt, 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.sodass dies immer noch ein Problem darstellt.
Josh
@Josh oben in Ihrer setup.py-Datei "aus setuptools import setup" anstelle von "from distutils.core import setup".
Bigjake

Antworten:

976

Hinweis: Vermeiden Sie die python setup.py installVerwendungpip install .

Sie müssen alle Dateien manuell entfernen und alle anderen von der Installation manuell durchgeführten Vorgänge rückgängig machen.

Wenn Sie die Liste aller Dateien nicht kennen, können Sie sie mit der --recordOption neu installieren und sich die Liste ansehen, die dadurch erstellt wird.

Um eine Liste der installierten Dateien aufzuzeichnen, können Sie Folgendes verwenden:

python setup.py install --record files.txt

Sobald Sie deinstallieren möchten, können Sie xargs verwenden, um das Entfernen durchzuführen:

xargs rm -rf < files.txt

Wenn Sie Windows ausführen, verwenden Sie Powershell:

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

Löschen Sie dann auch das enthaltende Verzeichnis, zB /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/auf macOS. Es hat keine Dateien, aber Python importiert trotzdem ein leeres Modul:

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

Nach dem Löschen zeigt Python:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
Martin v. Löwis
quelle
6
Wenn dies nicht funktioniert, fügen Sie sudo wie folgt hinzu:cat files.txt | xargs sudo rm -rf
saroele
21
Dies wird Dateien mit Leerzeichen durcheinander bringen. Siehe meine Antwort unten: stackoverflow.com/a/25209129/14456
Ian Kelling
1
Wie kann ich das Paket neu installieren, für das ich den Quellcode für die Verwendung von setup.py habe?
ス レ ッ ク
5
Dadurch bleiben auch leere Verzeichnisse an ihrer Stelle.
Dilawar
3
Hallo, ich habe Ihren Vorschlag für einige der Dateien ausprobiert, wenn ich cat files.txt | versuche xargs rm -rf es heißt, die Erlaubnis wurde verweigert, auch im Sudo-Modus, z. B. für / usr / local / bin / pydoc oder / usr / local / bin / idle. Irgendwelche Ideen warum?
212

Für mich funktioniert meistens Folgendes:

Pip installiert haben, zB:

$ easy_install pip

Überprüfen Sie, wie Ihr installiertes Paket aus Pip-Sicht benannt ist:

$ pip freeze

Darin werden die Namen aller Pakete aufgeführt, die Sie installiert haben (und die von pip erkannt wurden). Der Name kann manchmal lang sein, dann verwenden Sie nur den Namen des Pakets, das am und nach angezeigt wird #egg=. In den meisten Fällen können Sie auch den Versionsteil ignorieren (was auch immer folgt ==oder -).

Dann deinstallieren Sie das Paket:

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

Wenn Sie nach einer Bestätigung zum Entfernen des Pakets gefragt werden, haben Sie Glück und es wird entfernt.

pip erkennt alle Pakete, die von pip installiert wurden. Die meisten über easy_install oder setup.py installierten Pakete werden ebenfalls erkannt. In einigen seltenen Fällen kann dies jedoch fehlschlagen.

Hier ist ein echtes Beispiel aus meinem lokalen Test mit dem ttr.rdstmcunter MS Windows genannten Paket .

$ 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

Bearbeiten 2015-05-20

Alles, was oben geschrieben steht, gilt trotzdem, es sind jetzt kleine Modifikationen verfügbar.

Installieren Sie pip in Python 2.7.9 und Python 3.4

Neuere Python-Versionen enthalten ein Paket ensurepip, mit dem pip auch offline installiert werden kann:

$ python -m surepip --upgrade

Auf einigen Systemen (wie Debian Jessie) ist dies nicht verfügbar (um zu verhindern, dass die Installation von Systempython unterbrochen wird).

Verwenden von grepoderfind

Die obigen Beispiele setzen voraus, dass Sie grepinstalliert haben. Ich hatte (zu der Zeit, als ich MS Windows auf meinem Computer hatte) eine Reihe von Linux-Dienstprogrammen installiert (inkl. Grep). Verwenden Sie alternativ natives MS Windows findoder ignorieren Sie diese Filterung einfach und suchen Sie den Namen in einer etwas längeren Liste der erkannten Python-Pakete.

Jan Vlcinsky
quelle
1
Welches Verpackungstool / welche Version verwenden Sie, damit dies funktioniert? ( distutils, distribute, Etc ...)
Ciro Santilli冠状病毒审查六四事件法轮功
1
Ich benutze setuptools. Sie können bitbucket.org/vlcinsky/ttr.aws.utils.s3 überprüfen (was nicht perfekt ist). Wie auch immer, ich bin ziemlich unzufrieden mit der Verwendung von Namespace-Paketen. Manchmal ist der Import ohne sichtbaren Grund unterbrochen. Aber es ist eine andere Geschichte.
Jan Vlcinsky
1
mich selbst korrigieren. Obwohl ich importiere setuptools, benutze ich tatsächlich distribute. Eine weitere Lektion: Wenn Sie mein eigenes Paket von pypi installieren und planen, ein anderes Paket zu entwickeln, das lokal denselben Namespace verwendet $ pip install <the package> , verwenden $ easy_install <the package>Sie es nicht . Andernfalls treten beim Importieren Ihres Entwicklungspakets Konflikte auf.
Jan Vlcinsky
1
Um anderen zu helfen: Da ich kein Root bin, installiere ich alles in meinem Haus. Hier ist was ich getan habe easy_install --user --prefix=$HOME pip. Dann habe ich in meinem PATH Folgendes hinzugefügt : ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/binund ln -s /home/tflutre/.local/bin/pip2 ~/bin.
Flutre
3
Dies sollte als Antwort akzeptiert werden, da dies viel einfacher ist und pip normalerweise sowieso mit Python geliefert wird. Es ist einfach in der Eingabeaufforderung / im Terminal zu verwenden - pip uninstall moduleoder python -m pip uninstall modulesollte funktionieren. Sollte auch plattformübergreifend sein, wie es Teil von Python ist.
Edward
81

Die Antwort Nr. 1 hat Probleme:

  • Funktioniert nicht auf dem Mac.
  • Wenn eine Datei installiert ist, die Leerzeichen oder andere Sonderzeichen enthält, schlägt der xargsBefehl fehl und löscht alle Dateien / Verzeichnisse, die den einzelnen Wörtern entsprechen.
  • Das -rIn rm -rfist unnötig und kann im schlimmsten Fall Dinge löschen, die Sie nicht möchten.

Stattdessen für 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 --

Und für Fenster:

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

Es gibt auch unlösbare Probleme bei der Deinstallation der setup.pyInstallation, die Sie in einem typischen Fall nicht stören. Eine vollständigere Antwort finden Sie auf dieser Wiki-Seite:

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

Ian Kelling
quelle
3
Warum hinterlässt du einfach keinen Vorschlag unter dem gestimmten? Beachten Sie, dass es sich bei diesen "schwerwiegenden Problemen" um Eckfälle handelt.
lpapp
17
Ich habe einen Kommentar unter dem Upvoted hinterlassen. Mein Kommentar ist unter einem Link "Weitere Kommentare laden" vergraben, auf den nur sehr wenige Personen klicken. Ich habe auch meine eigene Antwort gegeben, weil ich viel mehr zu sagen hatte, dh. der Link in meiner Antwort. Außerdem wäre Eckfall nicht der erste Begriff, der mir in den Sinn kommt, wenn eine Datei ein Leerzeichen enthält.
Ian Kelling
Für das, was es wert ist, denke ich, dass dies bei Dateinamen, die Zeilenumbrüche enthalten, fehlschlagen wird :) Ob irgendwelche Paketbetreuer so böse sind, hoffe ich, dass ich es nie herausfinde.
Jack O'Connor
2
Zumindest unter OS X Mavericks verfügt xargs nicht über die Option -d. Warum? Weil Apple dich liebt. Auf jeden Fall hat dies die gleichen Auswirkungen wie oben und ist sicher mit Räumen und dergleichen. Es ist jedoch Bash-spezifisch. Nach dem Ausführen der Installation mit --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski
2
Einbetten von Variablen innerhalb @IanKelling printf‚s Format - String wird fehlschlagen , wenn die Zeichenfolge zB enthalten geschehen %oder \Zeichen. Geben Sie immer eine Formatzeichenfolge an: printf '%s\0' "$line"(vermeidet auch Echo). Obwohl Sie die Schleife weiter vermeiden können, indem Sie einfachtr '\n' '\0' < files.txt | xargs -0 rm -f
geirha
39

Notieren Sie zuerst die Dateien, die Sie installiert haben. Sie können diesen Befehl wiederholen, auch wenn Sie zuvor Folgendes ausgeführt haben setup.py install:

python setup.py install --record files.txt

Wenn Sie deinstallieren möchten, können Sie einfach:

sudo rm $(cat files.txt)

Dies funktioniert, weil der Befehl rm eine durch Leerzeichen getrennte Liste von Dateien zum Löschen benötigt und Ihr Installationsdatensatz genau eine solche Liste ist.

Nathan
quelle
Gibt es eine Möglichkeit, nicht nur zu überprüfen, ob mein Programm es installiert hat, sondern auch, ob seitdem keine andere Anwendung diese Ressource verwendet hat? Zum Beispiel habe ich ein Tool installiert. Dazu musste ich mehrere Bibliotheken installieren. Möglicherweise waren einige bereits installiert (was bedeutet, dass ich sie bei der Deinstallation nicht entfernen kann), aber ich kann auch nichts entfernen, was andere Anwendungen benötigen nicht installiert, weil meine Bibliothek zuerst installiert hatte ..
Gabrielle
19

Jetzt haben Sie bei Python die Wahl, pipwährend der Installation zu installieren (ich bin unter Windows und zumindest Python unter Windows!). In Anbetracht der Tatsache, dass Sie sich für die Installation pipwährend der Installation von Python entschieden haben (Sie müssen diese nicht auswählen, da dies die Standardeinstellung ist), pipist sie bereits für Sie installiert. Geben Sie dann in der pipEingabeaufforderung, sollten Sie eine Hilfe sehen kommen. Dort finden Sie die erforderlichen Gebrauchsanweisungen. ZB pip listzeigt Ihnen die Liste der installierten Pakete. Sie können verwenden

pip uninstall package_name

um jedes Paket zu deinstallieren, das Sie nicht mehr wollen. Lesen Sie hier mehr (Pip-Dokumentation) .

Sнаđошƒаӽ
quelle
8

Der faule Weg: Deinstallieren Sie einfach über das Windows-Installationsmenü (wenn Sie Windows verwenden) oder über den Befehl rpm, sofern Sie es nach dem Erstellen eines Distributionspakets zuerst neu installieren.

Zum Beispiel,

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

("foo" ist natürlich ein Beispiel).

RedGlyph
quelle
4
Ich weiß nicht, ob es mir gefällt, aber Sie bekommen einen Punkt für orthogales Denken. :)
Lennart Regebro
Um ehrlich zu sein, bin ich mir auch nicht sicher, daher "der faule Weg" ;-) Aber ich dachte, ich würde erwähnen, dass es möglich ist, mehr "Standard" -Installationsprogramme zu erstellen. Es ist seltsam, dass die Datei setup.py keine saubere Möglichkeit zum Entfernen von Paketen bietet.
RedGlyph
1
Für Deinstallationen sind zentralisierte Registrierungen der installierten Pakete und ihrer Dateien erforderlich, und es gibt keine. Es werden derzeit Diskussionen darüber geführt, wie diese Geschichte verbessert werden kann. Möglicherweise wird sie in Python 2.7 / 3.2 oder 2.8 / 3.3 oder so gelöst.
Lennart Regebro
1
@ Lennart: Es wird nicht Python 2.8 geben, zumindest ist das die aktuelle offizielle Aussage
Piotr Owsiak
2
@PiotrOwsiak: Ja, aber das war damals nicht die Aussage. 2.8 war zu diesem Zeitpunkt noch eine Möglichkeit und blieb es bis zur Genehmigung von PEP 404 Ende letzten Jahres, glaube ich.
Lennart Regebro
6

Wechseln Sie in Ihr Python-Paketverzeichnis und entfernen Sie Ihre .egg-Datei, z. B.: In Python 2.5 (Ubuntu): /usr/lib/python2.5/site-packages/

In Python 2.6 (Ubuntu): /usr/local/lib/python2.6/dist-packages/

user149513
quelle
1
Funktioniert, es sei denn, die Installation installiert Dateien außerhalb des Pakets, was einige tun, wie setuptools, das installiert wird, und den Befehl easy_install.
Lennart Regebro
3
Wenn ein Paket mit python setup.py wie vom OP angegeben installiert würde, gäbe es normalerweise kein Ei. OTOH, falls es eine gibt, weil easy_install verwendet wurde, besteht die dokumentierte Möglichkeit zum Deinstallieren von Paketen darin, easy_install -m zu verwenden, bevor die Eidatei gelöscht wird. Andernfalls können Eierschalen in der Datei easy-install.pth zurückbleiben.
Ned Deily
5

Nicht genau die Frage beantworten, aber etwas, das mir jeden Tag hilft:

Installieren Sie Ihre Pakete mit

pip install .

Dies bringt das Paket in $HOME/.local. Deinstallieren mit

pip uninstall <package_name>
Nico Schlömer
quelle
1
pip unistall .hat bei mir nicht funktioniert, aber pip uninstall <package_name>danke!
Danijel
4

Wahrscheinlich können Sie dies als Alternative tun: -

1) Holen Sie sich die Python-Version -

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

-> Mit dem obigen Befehl erhalten Sie die aktuelle Python-Version 2.4.3

2) Holen Sie sich das Installationsverzeichnis von 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

-> Über den obigen Befehl können Sie das Installationsverzeichnis abrufen, das - /usr/lib/python2.4/site-packages lautet

3) Von hier aus können Sie die Pakete und Python-Egg-Dateien entfernen

[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

Das hat bei mir funktioniert .. Und ich konnte das Paket deinstallieren, was mich beunruhigte :)

COD3R
quelle
3

Ich denke, Sie können die Datei setup.py öffnen, den Paketnamen suchen und dann pip bitten, sie zu deinstallieren.

Angenommen, der Name ist in einer 'METADATA'-Variablen verfügbar:

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

Die Aufzeichnung der Installationsausgabe und ein wenig Bash-Scripting machen den Trick ganz gut. Folgendes mache ich ...

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

Und Presto. Deinstalliert.

Seebarsch
quelle
2
Viel einfacher zu schreiben als sudo xargs rm -v < install.record.
Poolie
1

Wenn Sie noch Dateien haben, die nach der Neuinstallation eines Pakets gelöscht werden sollen, stellen Sie sicher, dass der Ordner buildebenfalls gelöscht wird. Angenommen, dies pkgist das Paket, das Sie löschen möchten:

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

Oben arbeiten Sie für Python3 und löschen Sie das Paket und seine * .egg-info-Datei

Ulises Rosas-Puchuri
quelle
1

Um {virtualenv}/lib/python2.7/site-packages/(wenn Sie virtualenv nicht verwenden, dann {system_dir}/lib/python2.7/dist-packages/)

  • Entfernen Sie die Ei - Datei (zB distribute-0.6.34-py2.7.egg)
  • Wenn eine Datei vorhanden ist easy-install.pth, entfernen Sie die entsprechende Zeile (dies sollte ein Pfad zum Quellverzeichnis oder zu einer Eidatei sein).
Bhindi
quelle
0

Ich hatte "python setup.py install" irgendwann in der Vergangenheit versehentlich in meiner globalen Umgebung ausgeführt und hatte große Schwierigkeiten bei der Deinstallation. Diese Lösungen haben nicht geholfen. "pip uninstall" funktionierte nicht mit "Kann 'splunk-appinspect' nicht deinstallieren. Es wurden keine Dateien zum Deinstallieren gefunden." "sudo pip uninstall" funktionierte nicht "Anforderung splunk-appinspect kann nicht deinstalliert werden, nicht installiert". Ich habe versucht, pip zu deinstallieren, den Pip-Cache zu löschen, meine Festplatte nach dem Paket zu durchsuchen usw.

"pip show" führte mich schließlich zu der Lösung, "Location:" zeigte auf ein Verzeichnis, und das Umbenennen dieses Verzeichnisses führte dazu, dass das Paket aus der Liste von pip entfernt wurde. Ich habe das Verzeichnis wieder umbenannt und es wurde nicht erneut in der Liste von pip angezeigt. Jetzt kann ich mein Paket in einer virtuellen Umgebung neu installieren.

mmacvicar
quelle
0

Ich hatte python setup.py installeinmal in meinem PyCharm ausgeführt, es installiert alle Pakete in meiner Conda-Basisumgebung. Später, wenn ich alle diese Pakete entfernen möchte, pip uninstallfunktioniert nicht. Ich musste sie manuell aus /anaconda3/lib/python3.7/site-packages löschen :(

Daher sehe ich keinen Grund, warum sie setup.py verwenden, anstatt die Datei require.txt zu schreiben. Die Anforderungsdatei kann zum Installieren von Paketen in einer virtuellen Umgebung verwendet werden und wird nicht mit Systempython-Paketen in Konflikt geraten.

Yossarian42
quelle
-1

Es ist möglicherweise besser, verwandte Dateien zu entfernen, indem Sie bash verwenden, um Befehle wie die folgenden zu lesen:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
Mark Peng
quelle
Dies ist eine Kopie einer vorhandenen früheren Antwort.
Karl Richter