wake-up-neo.net

Was ist der Zweck "pip install --user ..."?

Aus pip install --help:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

Die Dokumentation zu site.USER_BASE ist ein furchterregendes Wurmloch mit interessanten * NIX-Inhalten, die ich nicht verstehe.

Was ist der Zweck von --user in einfachem Englisch? Warum ist es wichtig, das Paket auf ~/.local/ zu installieren? Warum nicht einfach irgendwo in meinem $ PATH eine ausführbare Datei ablegen?

111
Rob Truxal

pip installiert standardmäßig Python Pakete in einem Systemverzeichnis (z. B. /usr/local/lib/python3.4). Dies erfordert Root-Zugriff.

--user erstellt stattdessen Pip-Installationspakete in Ihrem Ausgangsverzeichnis, für die keine besonderen Berechtigungen erforderlich sind.

133
duskwuff

_--user_ wird in site.USER_SITE installiert.

In meinem Fall war es _/Users/.../Library/Python/2.7/bin_. Also habe ich das zu meinem PATH (in _~/.bash_profile_ -Datei) hinzugefügt:

_export PATH=$PATH:/Users/.../Library/Python/2.7/bin
_
16

In anderen Antworten wird site.USER_SITE als Speicherort für Python -Pakete angegeben. Wenn Sie nach Binärdateien suchen, gehen diese in {site.USER_BASE}/bin.

Wenn Sie dieses Verzeichnis zum Suchpfad Ihrer Shell hinzufügen möchten, verwenden Sie:

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
7
rgov

Unter einem MAC-Betriebssystem wird das Flag --user verwendet, um sicherzustellen, dass die vom Betriebssystem verwendeten Bibliotheken nicht beschädigt werden. EinkonservativerAnsatz für viele MAC OS-Benutzer besteht darin, die Installation oder Aktualisierung von pip mit einem Befehl zu vermeiden, der Sudo erfordert. Dies beinhaltet also die Installation auf /usr/local/bin...

Siehe: Installieren von python für Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )

Ich bin nichtalleklar, warum die Installation in /usr/local/bin ein Risiko für einen MAC darstellt, da das System nur auf python basiert. Binärdateien in /Library/Frameworks/ und /usr/bin. Ich vermute, es liegt daran, dass die Installation in /usr/local/bin, wie oben erwähnt, Sudo erfordert, was die Tür zu einem kostspieligen Fehler mit den Systembibliotheken öffnet. Daher ist die Installation in ~/.local/bin ein sicherer Weg, um dieses Risiko zu vermeiden.

Referenz: Verwenden von python auf einem Mac ( https://docs.python.org/2/using/mac.html )

In dem Maße, in dem es von Vorteil ist, Pakete in den /usr/local/bin zu installieren, frage ich mich, ob es sinnvoll ist, den Eigentümer des Verzeichnisses von root in user zu ändern.Dies würde die Verwendung von Sudo vermeiden und gleichzeitig den Schutz vor systemabhängigen Änderungen gewährleisten.* Ist dies eine Sicherheitsvorgabe, ein Relikt der Häufigkeit von Unix-Systemen? in der Vergangenheit verwendet (als Server)? Oder zumindest ein guter Weg für MAC-Benutzer, die keinen Server hosten?

* Hinweis: Die System Integrity Protection (SIP) -Funktion von Mac scheint den Benutzer auch vor Änderungen an den systemabhängigen Bibliotheken zu schützen.

- E

7
Edmund's Echo

Der beste Weg ist, virtualenv zu installieren und nicht die Verwirrung --user zu verursachen. Sie erhalten mehr Flexibilität und müssen sich nicht mehr darum kümmern, die verschiedenen python -Versionen und -Projekte jedes Mal zu löschen, wenn Sie ein Paket installieren.

https://virtualenv.pypa.io/en/stable/

3
user603749

Nur eine Warnung:

Laut dieser Ausgabe ist --user derzeit in pip einer virtuellen Umgebung nicht gültig, da ein Benutzerstandort für eine virtuelle Umgebung nicht wirklich sinnvoll ist.

Verwenden Sie daher pip install --user some_pkg nicht in einer virtuellen Umgebung , da sonst die pip der virtuellen Umgebung verwechselt wird. Siehe diese Antwort für weitere Details.

1
YaOzI