Wie erkenne und entferne ich Python-Pakete, die über pip installiert wurden?

73

Ich habe aus Versehen Python - Pakete auf meinem System installiert verwenden pipstatt apt-get. Ich habe das auf zwei Arten gemacht:

  • Bei Verwendung einer älteren Version von virtualenv habe ich vergessen, --no-site-packagesbeim Erstellen von virtualenv Anhänge hinzuzufügen. Nach dem Aufrufen pip installwurden die Python-Pakete auf dem System installiert und nicht auf virtualenv
  • In einem korrekt eingerichteten virtuellen Env habe ich Folgendes eingegeben sudo pip install somepackage: das Sudo, das auf dem System installiert ist, und nicht das virtuelle Env

Ich bemerkte dies zufällig, weil ich pip freezeaußerhalb eines virtuellen Fensters tippte und einige der aufgelisteten Python-Pakete entdeckte, die nicht dort sein sollten. Nun ist meine Frage:

  • Wie identifiziere ich alle Python-Pakete, die fälschlicherweise auf dem System installiert wurden (dh Python-Pakete, die in der pip freezeListe angezeigt werden, aber nicht mit installiert wurden apt-get)?
  • Wie entferne ich sie?
david.libremone
quelle

Antworten:

56

Ubuntu Oneiric (und ich erwarte auch neuere Versionen) installiert pip-Pakete auf /usr/local/lib/python2.7/dist-packagesund aptPakete auf /usr/lib/python2.7/dist-packages. Überprüfen Sie einfach das vorherige Verzeichnis und sudo pip uninstalljedes Paket, das Sie dort finden.

Capi Etheriel
quelle
12
Ich wurde brutal und gab aus sudo rm -r /usr/local/lib/python2.7. So weit, ist es gut.
Apteryx
@Apteryx, ich habe das gleiche mit /usr/local/lib/python3.5und nach einer Weile ein Upgrade des update-notifier-commonPakets fehlgeschlagen, weil Python 3- sixPaket fehlt . Ich landete Installation sixmit sudo -H pip3 install six.
Alexey
2
@Apteryx Gott verdammt du Mann! Ich habe das gleiche getan und jetzt ist mein gesamtes System total beschissen! weil fast alles in Ubuntu auf Python beruht!
Yukashima Huksay
Ich habe bemerkt, dass ich jetzt ein paar defekte ausführbare Dateien in habe /usr/local/bin/(vor einer Weile habe ich gerade entfernt /usr/local/lib/python3.5und auf conda umgestellt ).
Alexey
22

Pip ignoriert derzeit Deinstallationsbefehle, die versuchen, etwas zu deinstallieren, das dem Betriebssystem gehört. Es kommt nicht zu Fehlern, wie es bei einem fehlenden Paket der Fall ist. So, jetzt können Sie mit dem folgenden Prozess deinstallieren:

pip freeze > dump.txt

Bearbeiten Sie die Speicherauszugsdatei, um alle -e"bearbeitbaren Installations" -Zeilen zu entfernen. Tauschen Sie die neuen Zeilen nach dem ==Zeichen ( %s;==.*;;gin vim) gegen Leerzeichen ( %s;\n; ;gin vim) aus. Dann können Sie alle nicht im Besitz befindlichen Pakete mit deinstallieren

cat dump.txt | xargs sudo pip uninstall -y

Ich musste diesen Vorgang zweimal durchführen, da auch ein paar Pakete installiert ~/.local/libwaren.

Henry Schreiner
quelle
1
Dies sollte die akzeptierte Antwort für mich sein
Nam G VU
3
Sollte jemand einen vimless Einzeiler wollen:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez
4
Vorsichtig! Dies hängt davon ab, ob Ihr Betriebssystem eine spezielle Version von liefert pip. Auf Archlinux pipdeinstalliert glücklich Systempakete. Auf der anderen Seite pipbeschwert sich über Debian Jessie und Fehler:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
1
brauchst du das sudo - Dies sollte definitiv die akzeptierte Antwort sein
Jonathan
6

AFAIK sudo pip installwird am installiert /usr/local/lib/pythonVERSION/dist-packages. Sie müssen ausgeführt werden, sudo pip uninstallum Pakete systemweit zu deinstallieren. Es pip freezesieht so aus, als würde nach Paketmetadaten gesucht und alles, was installiert ist, aufgelistet, dh sowohl von pip als auch von apt-get außerhalb von virtualenvs. -lIn der virtuellen Umgebung gibt es die Möglichkeit, Pakete aufzulisten, die nur für diese virtuelle Umgebung gelten. Dies scheint jedoch auch in der virtuellen Umgebung der Fall zu sein. Ich denke, Sie können auch verwandte Pakete löschen, /usr/local/lib/pythonVERSION/dist-packagesaber ich denke, dies ist keine sehr bequeme Methode.

sagarchalisieren
quelle
5

Um ein über pip installiertes Paket zu entfernen, drücken Sie einfach Ctrl+ Alt+ Tauf Ihrer Tastatur, um Terminal zu öffnen. Führen Sie beim Öffnen den folgenden Befehl aus.

pip uninstall < package-name >

Nach Paketen suchen

pip search <package you want to search for>

Um festzustellen, welche Python-Pakete von pip installiert wurden, freezegeben Sie den Befehl ein, der eine Liste der installierten Pakete und ihrer Versionen enthält. Ich würde vorschlagen, alle Instanzen zu entfernen und mit dem sudo apt-getBefehl neu zu installieren

sudo apt-get install python3
Mitch
quelle
Wie bestimme ich, welche Python-Pakete von pip und welche von apt-get installiert wurden? kann ich das noch, pip uninstallwenn ich es überhaupt benutzt habe sudo pip install?
david.libremone
@ d3vid pip freezezeigt nur die installierten Pakete an (AFAICS).
Oli
1
@oli pip freeze listet zumindest auch Pakete auf, die von apt installiert wurden, wie andere Antworten hier beschreiben.
Nealmcb
0

Ich musste den Speicherplatz von Python-Paketen sicher bereinigen. Obwohl dies eine vollständige Bereinigung von Paketen ist, musste ich auch Python-Versionen verschieben, damit ich keine alten Pakete benötigte. Ich habe Folgendes verwendet, um alle meine Paketnamen abzurufen, die ersten beiden Zeilen zu überspringen und die erste Spalte abzurufen und ohne Benutzerinteraktion zu deinstallieren:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}
m1st0
quelle
-2

Das hat etwas mit Homebrew zu tun. Ich hatte keine Probleme mit pyodbc auf meinem Mac Air, bis ich Homebrew installiert und es für ein paar Dinge verwendet habe. Ich habe diesen Thread auf Github gefunden , der in einer Lösung endet, die für mich funktioniert hat.

"Wenn Sie Homebrew haben, installieren Sie einfach die ODBC-Header:

$ brew install unixodbc

und starte "pip install pyodbc" erneut. "

Diese 100% lösten das Problem für mich und dauerten nur einen Moment. Versuch es einmal.

Pogo
quelle
Vielleicht müssen Sie dies bei Ask Different posten? apple.stackexchange.com
david.libremone