Von 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 für site.USER_BASE ist ein erschreckendes Wurmloch interessanter * NIX-Themen, die ich nicht verstehe.
Was ist der Zweck --user
in einfachem Englisch? Warum sollte es wichtig sein, das Paket zu installieren ~/.local/
? Warum nicht einfach irgendwo eine ausführbare Datei in meinen $ PATH einfügen?
python
python-3.x
pip
virtualenv
Rob Truxal
quelle
quelle
import site; print site.USER_SITE
den Installationsort drucken. Für mich habe ich/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
ist dies das Standardverzeichnis für Pakete, die von pip installiert wurden . Wenn ein Benutzer jedoch benutzerspezifische Pakete installieren möchte, kann er diese verwenden$ sudo pip3 --user install some_package
. Dieses Paket ist für Gruppen und andere Personen, die auf diesen Host zugreifen, nicht verfügbar.Antworten:
pip installiert standardmäßig Python-Pakete in einem Systemverzeichnis (z. B.
/usr/local/lib/python3.4
). Dies erfordert Root-Zugriff.--user
Pip installiert stattdessen Pakete in Ihrem Home-Verzeichnis, für die keine besonderen Berechtigungen erforderlich sind.quelle
--user
es wichtig sicherzustellen, dass das Paket nicht als root ausgeführt wird? (Ich stelle mir ähnliche Optionen wie Wireshark / kismet / burpsuite vor, um Richtlinien für den Gruppenzugriff einzurichten, wodurch nicht alle Programmfunktionen als Root ausgeführt werden können. Ist das auf dem richtigen Weg?) Oder ist die--user
Option nur gemeint zu ermöglichen , um die Installation ohne root - Rechte? Wenn das der Fall ist, warum benutze ich es niesudo pip install foo_package
? Ich habe noch nie Root-Privilegien benötigt, um über Pip zu installieren.--user
Parameter geht es um Benutzerisolation! Das macht wie eine lächerliche Menge Sinn. Danke @NDEthos!pip freeze --user
?--user
installiert insite.USER_SITE
.Für meinen Fall war es
/Users/.../Library/Python/2.7/bin
. Also habe ich das zu meinem PFAD hinzugefügt (in~/.bash_profile
Datei):quelle
Andere Antworten erwähnen
site.USER_SITE
, wo Python-Pakete platziert werden. Wenn Sie nach Binärdateien suchen, gehen diese ein{site.USER_BASE}/bin
.Wenn Sie dieses Verzeichnis zum Suchpfad Ihrer Shell hinzufügen möchten, verwenden Sie:
quelle
Nur eine Warnung:
Nach diesem Thema ,
--user
wird derzeit in einer virtuellen env ist nicht gültigpip
, da ein Benutzer Lage nicht wirklich sinnvoll für eine virtuelle Umgebung macht.Verwenden Sie es also nicht
pip install --user some_pkg
in einer virtuellen Umgebung , da sonst die virtuelle Umgebungpip
verwirrt wird. Siehe diese Antwort für weitere Details.quelle
Der beste Weg ist zu installieren
virtualenv
und nicht die--user
Verwirrung zu erfordern . Sie erhalten mehr Flexibilität und müssen sich nicht jedes Mal, wenn Sie ein Paket installieren, die verschiedenen Python-Versionen und -Projekte überladen.https://virtualenv.pypa.io/en/stable/
quelle
Unter macOS besteht der Grund für die Verwendung des
--user
Flags darin, sicherzustellen, dass die Bibliotheken, auf die sich das Betriebssystem stützt, nicht beschädigt werden. Ein konservativer Ansatz für viele MacOS-Benutzer besteht darin, die Installation oder Aktualisierung von pip mit einem erforderlichen Befehl zu vermeidensudo
. Dies beinhaltet also die Installation auf/usr/local/bin
...Ref: Installieren von Python für Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
Ich bin mir nicht ganz sicher, warum die Installation
/usr/local/bin
auf einem Mac ein Risiko darstellt, da das System nur auf Python-Binärdateien in/Library/Frameworks/
und angewiesen ist/usr/bin
. Ich vermute, es liegt daran, dass, wie oben erwähnt, die Installation in/usr/local/bin
erfordert,sudo
was die Tür zu einem kostspieligen Fehler mit den Systembibliotheken öffnet. Die Installation in~/.local/bin
ist daher ein sicherer Weg, um dieses Risiko zu vermeiden.Ref: Verwenden von Python auf einem Mac ( https://docs.python.org/2/using/mac.html )
In dem Maße, in dem die Installation von Paketen einen Vorteil
/usr/local/bin
bietet, frage ich mich, ob es sinnvoll ist, den Eigentümer des Verzeichnisses vonroot
auf zu ändernuser
. Dies würde eine Verwendung vermeiden undsudo
gleichzeitig vor systemabhängigen Änderungen schützen. * Ist dies ein Sicherheitsstandard, ein Relikt davon, wie Unix-Systeme in der Vergangenheit häufiger verwendet wurden (als Server)? Oder zumindest ein guter Weg für Mac-Benutzer, die keinen Server hosten?* Hinweis: Die SIP-Funktion (System Integrity Protection) von Mac scheint den Benutzer auch vor dem Ändern der systemabhängigen Bibliotheken zu schützen.
- E.
quelle
Ohne virtuelle Umgebungen
pip <command> --user
Ändert den Umfang des aktuellen pip-Befehls so, dass er auf dem lokalen Python-Paketinstallationsspeicherort des aktuellen Benutzerkontos und nicht auf dem standardmäßigen systemweiten Paketinstallationsspeicherort funktioniert.Dies ist nur auf einem Mehrbenutzer-Computer wirklich wichtig. Alles, was am Systemspeicherort installiert ist, ist für alle Benutzer sichtbar. Wenn Sie also am Benutzerstandort installieren, wird die Paketinstallation von anderen Benutzern getrennt (sie sehen sie nicht und müssten sie separat installieren, um sie zu verwenden). Da es zu Versionskonflikten kommen kann, kann die Installation eines Pakets mit Abhängigkeiten, die von anderen Paketen benötigt werden, zu Problemen führen. Es ist daher am besten, nicht alle von einem bestimmten Benutzer verwendeten Pakete an den Installationsort des Systems zu verschieben.
--user
Standort. Es wird in einem anderen Ordner installiert, der je nach Paket und Verwendung möglicherweise zum Pfad hinzugefügt werden muss oder nicht (viele Pakete installieren Befehlszeilentools, die sich auf dem Pfad befinden müssen, um von einer Shell ausgeführt zu werden). .--user
wird die Verwendung von root / sudo bevorzugt oder es ist eine Administratorinstallation erforderlich, die sich auf die Python-Umgebung jedes Benutzers auswirkt, außer in Fällen allgemeiner Pakete, die der Administrator standardmäßig allen Benutzern zur Verfügung stellen möchte.apt
, stattpip
.Mit virtuellen Umgebungen
venv
Befehl in den Python VENV-Dokumenten .Die
--user
Option in einer aktiven venv / virtualenv-Umgebung wird am Python-Speicherort des lokalen Benutzers installiert (wie ohne virtuelle Umgebung).Pakete werden standardmäßig in der virtuellen Umgebung installiert. Wenn Sie sie jedoch verwenden
--user
, wird die Installation außerhalb der virtuellen Umgebungen im Python-Skriptverzeichnis des Benutzers erzwungen (unter Windows ist dies derzeitc:\users\<username>\appdata\roaming\python\python37\scripts
für mich mit Python 3.7 der Fall).Sie können jedoch nicht von einer virtuellen Umgebung aus auf ein System oder eine Benutzerinstallation zugreifen (selbst wenn Sie diese
--user
in einer virtuellen Umgebung verwendet haben).Wenn Sie eine virtuelle Umgebung mit dem
--system-site-packages
Argument installieren , haben Sie Zugriff auf den Systemskriptordner für Python. Ich glaube, dies beinhaltete auch den Benutzer-Python-Skriptordner, bin mir aber nicht sicher. Dies kann jedoch unbeabsichtigte Folgen haben, und es ist nicht die beabsichtigte Art, virtuelle Umgebungen zu verwenden.Speicherort des Python-Systems und der Installationsordner für lokale Benutzer
Sie finden den Speicherort des Benutzerinstallationsordners für Python mit
python -m site --user-base
. Ich finde widersprüchliche Informationen in den Fragen und Antworten, in der Dokumentation und verwende diesen Befehl tatsächlich auf meinem PC, um die Standardeinstellungen zu ermitteln. Sie befinden sich jedoch unter dem Benutzer-Ausgangsverzeichnis (~
Verknüpfung in * nix undc:\users\<username>
normalerweise für Windows).Andere Details
Die
--user
Option ist nicht für jeden Befehl gültig. Beispielsweisepip uninstall
werden Pakete überall dort gefunden und deinstalliert, wo sie installiert wurden (im Benutzerordner, im Ordner für die virtuelle Umgebung usw.), und die--user
Option ist ungültig.Mit installierte
pip install --user
Elemente werden an einem lokalen Speicherort installiert, der nur vom aktuellen Benutzerkonto angezeigt wird, und erfordern keinen Root-Zugriff (unter * nix) oder Administratorzugriff (unter Windows).Die
--user
Option ändert allepip
Befehle, die sie akzeptieren, um den Benutzerinstallationsordner anzuzeigen / zu bearbeiten. Wenn Sie sie verwendenpip list --user
, werden nur Pakete angezeigt, mit denen sie installiert wurdenpip install --user
.quelle
pip install
ohne zu vermeiden--user
. Dies würde Python-Pakete an Stellen installieren, die wirklich dem Paketmanager des Systems überlassen werden sollten (zum Beispielapt
in Debian / Ubuntu). Es ist besser, sich nicht damit anzulegen, das führt zu so vielen Problemen. Wenn ein Python-Paket für alle Benutzer verfügbar sein muss, verwenden Sie den Paketmanager des Betriebssystems, tun Sie dies jedoch nichtsudo pip install ...
. Eine Alternative istsudo pip install --target ...
. Unter Windows ist dies weniger ein Problem.~/.local/bin directory
wird theoretisch erwartet, in Ihrem zu sein$PATH
.Diesen Leuten zufolge ist es ein Fehler, der
$PATH
bei der Verwendung nicht hinzugefügt wirdsystemd
.Diese Antwort erklärt es ausführlicher.
Aber auch wenn Ihre Distribution enthält das
~/.local/bin
Verzeichnis auf das$PATH
, könnte es in der folgenden Form (innen sein~/.profile
):Dies würde erfordern, dass Sie sich abmelden und erneut anmelden , wenn das Verzeichnis vorher nicht vorhanden war.
quelle