So deinstallieren Sie ein mit pip install --user installiertes Paket

219

--userFür pip gibt es eine Option, mit der ein Python-Paket pro Benutzer installiert werden kann:

pip install --user [python-package-name]

Ich habe diese Option verwendet, um ein Paket auf einem Server zu installieren, für den ich keinen Root-Zugriff habe. Was ich jetzt brauche, ist das installierte Paket auf dem aktuellen Benutzer zu deinstallieren. Ich habe versucht, diesen Befehl auszuführen:

pip uninstall --user [python-package-name]

Aber ich habe:

no such option: --user

Wie kann ich ein Paket, mit dem ich installiert habe, deinstallieren pip install --user, außer das Paket manuell zu suchen und zu löschen?

Ich habe diesen Artikel gefunden

pip kann nicht aus dem Verzeichnis site-packages pro Benutzer deinstalliert werden

Dies beschreibt, dass die Deinstallation von Paketen aus dem Benutzerverzeichnis nicht unterstützt wird. Laut Artikel, wenn es richtig implementiert wurde, dann mit

pip uninstall [package-name]

Das installierte Paket wird auch in Benutzerverzeichnissen durchsucht. Aber ein Problem bleibt für mich immer noch. Was wäre, wenn dasselbe Paket sowohl systemweit als auch pro Benutzer installiert würde? Was ist, wenn jemand auf ein bestimmtes Benutzerverzeichnis abzielen muss?

Serjik
quelle
1
Nein, Sie müssen eine virtuelle Umgebung pro Benutzer festlegen: Gruppe und dem Ordner, der sie enthält, die richtigen Systemberechtigungen erteilen.
Danius
3
Es gibt keine Möglichkeit, ein Paket systemweit für alle Benutzer zu installieren und es dann für einige Benutzer selektiv zu deinstallieren. Wenn das Paket wie installiert wurde, wird die --userDeinstallation ohne --userdas tun, was Sie wollen.
Tripleee
@tripleee: Ich habe keine systemweite Berechtigung und möchte nicht, ich muss es nur pro aktuellem Benutzer deinstallieren
Serjik
1
Finden Sie heraus, in welchem ​​Verzeichnis Sie keine Berechtigungen zum Entfernen haben, korrigieren Sie die Berechtigungen oder verschieben Sie es manuell zur Seite.
Tripleee

Antworten:

196

Nachdem dies mit Python 3.5 und pip 7.1.2 unter Linux getestet wurde, scheint die Situation wie folgt zu sein:

  • pip install --user somepackageInstalliert auf $HOME/.localund die Deinstallation funktioniert mit pip uninstall somepackage.

  • Dies gilt unabhängig davon, ob somepackagegleichzeitig systemweit installiert wird oder nicht .

  • Wenn das Paket an beiden Stellen installiert ist, wird nur das lokale deinstalliert. Um das Paket systemweit mit zu pipdeinstallieren, deinstallieren Sie es zuerst lokal und führen Sie dann denselben Deinstallationsbefehl mit rootBerechtigungen erneut aus.

  • pip install --target somedir somepackageInstalliert das Paket zusätzlich zum vordefinierten Benutzerinstallationsverzeichnis in somedir. Es gibt keine Möglichkeit, ein Paket von einem solchen Ort mit zu deinstallieren pip. (Aber es gibt eine etwas alte nicht zusammengeführte Pull-Anfrage auf Github, die implementiert wird pip uninstall --target.)

  • Da die einzigen Orte pip, von denen jemals deinstalliert wird, systemweit und vordefiniert benutzerlokal sind, müssen Sie pip uninstallals der jeweilige Benutzer ausgeführt werden, um die Deinstallation aus dem lokalen Installationsverzeichnis eines bestimmten Benutzers durchzuführen.

Thomas Lotze
quelle
2
Sind diese Aussagen korrekt, um pip in einer virtuellen Umgebung auszuführen?
Kbolino
In meinem Fall hat die Deinstallation für Pip 9.0.1 nicht funktioniert. Das Paket ist immer noch bei HOME /./ local installiert
Genom
2
Punkt 2 scheint auf meinem System nicht zu stimmen. Ich habe ein Systempaket jediinstalliert /usr/lib64/python2.7/site-packages/. Wenn ich es als normaler Benutzer tue: pip install --user jedi und dann pip uninstall jediversucht pip zu deinstallieren /usr/lib64/python2.7/site-packages/jediund startet dann mit Permission denied. Wenn --userder Befehl uninstall nicht vorhanden ist, wie kann ich uninstall anweisen, nicht zu versuchen, /usr/lib64/python2.7/site-packages/jedisondern zu deinstallieren ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd
Genau das gleiche hier wie @AstroFloyd
Nikana Reklawyks
28

Beispiel zum Deinstallieren des Pakets 'oauth2client' unter MacOS:

pip uninstall oauth2client
Huy - Logarit
quelle
9

Seien Sie jedoch vorsichtig für diejenigen, die pip install --user some_pkg in einer virtuellen Umgebung arbeiten .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

In diesem Fall müssen Sie die aktuelle virtuelle Umgebung deaktivieren und dann die entsprechende python/ pipausführbare Datei verwenden, um die Benutzer-Site-Pakete aufzulisten oder zu deinstallieren:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Beachten Sie, dass dieses Problem vor einigen Jahren gemeldet wurde . Und es scheint, dass die aktuelle Schlussfolgerung lautet: --userist in pipeiner virtuellen Umgebung nicht gültig , da ein Benutzerstandort für eine virtuelle Umgebung nicht wirklich sinnvoll ist.

YaOzI
quelle
3
Zu spät!, Ich habe --userin der virtuellen Umgebung verwendet, gibt es eine Möglichkeit, das pip list
rückgängig zu machen
2
"Und es scheint, dass die aktuelle Schlussfolgerung lautet: --user ist in der Pip einer virtuellen Umgebung nicht gültig, da ein Benutzerstandort für eine virtuelle Umgebung nicht wirklich sinnvoll ist." Einverstanden. Benutzerinstallationen machen den gesamten Zweck einer virtuellen Umgebung zunichte. Leider gibt es viele schlechte Beispiele dafür, wie Leute dies tun.
Stephen Bosch
5

Ich denke, es ist möglich, mit --userFlag installierte Pakete zu deinstallieren . Dieser hat für mich gearbeitet;

pip freeze --user | xargs pip uninstall -y

Für Python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Aber irgendwie deinstallieren diese Befehle setuptools und pip nicht. Nach diesen Befehlen (wenn Sie wirklich sauberes Python wollen) können Sie sie mit löschen;

pip uninstall setuptools && pip uninstall pip

Thiras
quelle
2
Dies ist eine elegante Lösung, die für mich gut funktioniert hat.
Stephen Bosch
2

Die Antwort ist noch nicht möglich . Sie müssen es manuell entfernen.

Sorin
quelle
Bei der Installation eines Pakets gab es einen Traceback. Die Deinstallation hat danach nie mehr funktioniert.
Syam
Wie liste ich alle für ein bestimmtes Paket installierten Pip-Dateien auf (damit ich sie entfernen kann)?
AstroFloyd
Es ist praktisch unmöglich, weil pip setup.py ausführt, das externen Code ausführt. Bis setup.py vollständig entfernt ist, vergessen Sie es, wahrscheinlich bis 2022.
Sorin
2

Wie @ thomas-lotze erwähnt hat, macht Pip Tooling dies derzeit nicht, da es keine entsprechende Option --user gibt. Ich finde jedoch, dass ich in ~ / .local / bin einchecken und nach der spezifischen pip #. # Suchen kann, die für mich so aussieht, als würde sie der Option --user entsprechen.

In meinem Fall:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

Und dann einfach mit der spezifischen Pip-Version deinstallieren.

AnthonyC
quelle
stackoverflow.com/a/11250821/14420 , um das Rezept für die Deinstallation des Bades zu sehen, z. B. ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -yfür alles außer Paketen, die im bearbeitbaren Modus installiert sind
matt wilkie
0

Ich verwende Anaconda Version 4.3.22 und eine Python3.6.1-Umgebung und hatte dieses Problem. Hier ist die Geschichte und das Update:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

Ich habe dies in meiner python3.6-Umgebung getan und diesen Fehler erhalten.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Als nächstes habe ich versucht, python3.6 herunterzuladen und die python3.dll in den Ordner und in verschiedene Ordner zu legen. Nichts hat sich geändert.

Schließlich wurde dies behoben:

pip uninstall opencv-python

(Die andere Conda-Forge-Version ist noch installiert.) Dies ließ nur die Conda-Version übrig, und das funktioniert in 3.6.

>>>import cv2
>>>

Arbeiten!

Marc Maxmeister
quelle