Van 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.)
De documentatie voor site.USER_BASE is een angstaanjagend wormgat van interessante *NIX-onderwerpen die ik niet begrijp.
Wat is het doel van --user
in gewoon Engels?Waarom zou het installeren van het pakket naar ~/.local/
ertoe doen? Waarom plaats je niet gewoon een uitvoerbaar bestand ergens in mijn $PATH?
Antwoord 1, autoriteit 100%
pip is standaard ingesteld op het installeren van Python-pakketten in een systeemmap (zoals /usr/local/lib/python3.4
). Dit vereist root-toegang.
--user
maakt in plaats daarvan pip-installatiepakketten in uw homedirectory, waarvoor geen speciale privileges nodig zijn.
Antwoord 2, autoriteit 12%
--user
installeert in site.USER_SITE
.
In mijn geval was het /Users/.../Library/Python/2.7/bin
. Dus ik heb dat toegevoegd aan mijn PATH (in ~/.bash_profile
bestand):
export PATH=$PATH:/Users/.../Library/Python/2.7/bin
Antwoord 3, autoriteit 7%
Andere antwoorden vermelden site.USER_SITE
als waar Python-pakketten worden geplaatst. Als u op zoek bent naar binaire bestanden, gaan deze naar {site.USER_BASE}/bin
.
Als je deze map aan het zoekpad van je shell wilt toevoegen, gebruik dan:
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
Antwoord 4, autoriteit 7%
Gewoon een waarschuwing:
Volgens dit probleem, --user
is momenteel niet geldig in de pip
van een virtuele omgeving, aangezien een gebruikerslocatie niet echt logisch is voor een virtuele omgeving.
Gebruik pip install --user some_pkg
dus niet in een virtuele omgeving, anders wordt de pip
van de virtuele omgeving verward. Zie dit antwoordvoor meer details.
Antwoord 5, autoriteit 6%
Zonder virtuele omgevingen
pip <command> --user
wijzigt het bereik van het huidige pip-commando om te werken op de lokale installatielocatie van het pythonpakket van de huidige gebruikersaccount, in plaats van de systeembrede installatielocatie van het pakket, wat de standaard is.
- Zie Gebruikersinstallatiesin de PIP-gebruikershandleiding.
Dit is alleen van belang op een machine met meerdere gebruikers. Alles wat op de systeemlocatie is geïnstalleerd, is zichtbaar voor alle gebruikers, dus installatie op de gebruikerslocatie houdt die pakketinstallatie gescheiden van andere gebruikers (zij zullen het niet zien en zouden het zelf apart moeten installeren om het te gebruiken). Omdat er versieconflicten kunnen zijn, kan het installeren van een pakket met afhankelijkheden die andere pakketten nodig hebben, problemen veroorzaken, dus het is het beste om niet alle pakketten die een bepaalde gebruiker gebruikt naar de installatielocatie van het systeem te pushen.
- Als het een machine voor één gebruiker is, is er weinig of geen verschil met het installeren op de locatie
--user
. Het wordt in een andere map geïnstalleerd, die al dan niet aan het pad moet worden toegevoegd, afhankelijk van het pakket en hoe het wordt gebruikt (veel pakketten installeren opdrachtregelprogramma’s die zich op het pad moeten bevinden om vanuit een shell te kunnen worden uitgevoerd) . - Als het een machine met meerdere gebruikers is, heeft
--user
de voorkeur boven het gebruik van root/sudo of waarvoor beheerdersinstallatie vereist is en de Python-omgeving van elke gebruiker beïnvloedt, behalve in gevallen van algemene pakketten die de beheerder wil standaard beschikbaar maken voor alle gebruikers.- Opmerking:Volgens de opmerkingen is bij de meeste Unix/Linux-installaties erop gewezen dat systeeminstallaties de algemene pakketbeheerder moeten gebruiken, zoals
apt
, in plaats vanpip
.
- Opmerking:Volgens de opmerkingen is bij de meeste Unix/Linux-installaties erop gewezen dat systeeminstallaties de algemene pakketbeheerder moeten gebruiken, zoals
Met virtuele omgevingen
- Lees meer over het installeren van pakketten met virtuele omgevingen in de Python Packaging-documentatie.
- Lees over het maken en gebruiken van virtuele omgevingen en de opdracht
venv
in de Python VENV-documenten.
De optie --user
in een actieve venv/virtualenv-omgeving wordt geïnstalleerd op de python-locatie van de lokale gebruiker (hetzelfde als zonder een virtuele omgeving).
Pakketten worden standaard in de virtuele omgeving geïnstalleerd, maar als u --user
gebruikt, wordt het gedwongen om buiten de virtuele omgevingen te installeren, in de python-scriptmap van de gebruiker (in Windows is dit momenteel is c:\users\<username>\appdata\roaming\python\python37\scripts
voor mij met Python 3.7).
U hebt echter geen toegang tot een systeem of gebruikersinstallatie vanuit een virtuele omgeving (zelfs als u --user
gebruikt in een virtuele omgeving).
Als je een virtuele omgeving installeert met het argument --system-site-packages
, heb je toegang tot de systeemscriptmap voor python. Ik geloof dat dit ook de gebruikerspython-scriptmap bevatte, maar ik weet het niet zeker. Dit kan echter onbedoelde gevolgen hebben en het is niet de beoogde manier om virtuele omgevingen te gebruiken.
Locatie van het Python-systeem en de installatiemappen voor lokale gebruikers
Je kunt de locatie van de gebruikersinstallatiemap voor python vinden met python -m site --user-base
. Ik vind tegenstrijdige informatie in Q&A’s, de documentatie en gebruik deze opdracht op mijn pc over wat de standaardinstellingen zijn, maar ze staan onder de homedirectory van de gebruiker (~
snelkoppeling in *nix, en c:\users\<username>
typisch voor Windows).
Andere details
De optie --user
is niet geldig voor elk commando. Bijvoorbeeld pip uninstall
zal pakketten vinden en verwijderen waar ze ook geïnstalleerd waren (in de gebruikersmap, virtuele omgevingsmap, etc.) en de --user
optie is niet geldig.
Dingen die zijn geïnstalleerd met pip install --user
worden geïnstalleerd op een lokale locatie die alleen wordt gezien door het huidige gebruikersaccount en vereisen geen root-toegang (op *nix) of beheerderstoegang (op Windows).
De optie --user
wijzigt allepip
-commando’s die het accepteren om de installatiemap van de gebruiker te zien/werken, dus als u pip list --user
het zal alleenpakketten tonen die zijn geïnstalleerd met pip install --user
.
Antwoord 6, autoriteit 4%
De beste manier om dit te doen, is virtualenv
te installeren en de verwarring van --user
niet te vereisen. Je krijgt meer flexibiliteit en je hoeft je geen zorgen te maken over de verschillende python-versies en projecten telkens wanneer je een pakket pip installeert.
https://virtualenv.pypa.io/en/stable/
Antwoord 7, autoriteit 3%
Op macOS is de reden voor het gebruik van de vlag --user
om ervoor te zorgen dat we de bibliotheken waarop het besturingssysteem vertrouwt niet beschadigen. Een conservatievebenadering voor veel macOS-gebruikers is om pip niet te installeren of bij te werken met een commando dat sudo
vereist. Dit omvat dus ook het installeren naar /usr/local/bin
…
Ref: Python installeren voor Neovim (https: //github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim)
Het is me niet allesduidelijk waarom het installeren in /usr/local/bin
een risico is op een Mac, aangezien het systeem alleen vertrouwt op python-binaries in /Library/Frameworks/
en /usr/bin
. Ik vermoed dat het komt omdat, zoals hierboven vermeld, voor installatie in /usr/local/bin
sudo
nodig is, wat de deur opent naar het maken van een kostbare fout met de systeembibliotheken. Dus installeren in ~/.local/bin
is een veilige manier om dit risico te vermijden.
Ref: Python gebruiken op een Mac (https://docs.python.org //us/mac.html)
Ten slotte, voor zover er een voordeel is van het installeren van pakketten in de /usr/local/bin
, vraag ik me af of het zin heeft om de eigenaar van de map te veranderen van root
naar user
? Dit zou voorkomen dat u sudo
hoeft te gebruiken, terwijl u toch beschermd bent tegen het aanbrengen van systeemafhankelijke wijzigingen.* Is dit een beveiligingsstandaard die een overblijfsel is van hoe Unix-systemen in het verleden vaker werden gebruikt (als servers)? Of op zijn minst gewoon een goede manier om te gaan voor Mac-gebruikers die geen server hosten?
*Opmerking: Mac’s System Integrity Protection (SIP)-functie lijkt de gebruiker ook te beschermen tegen het wijzigen van de systeemafhankelijke bibliotheken.
– E
Antwoord 8
Waarom zou het installeren van het pakket naar ~/.local/ ertoe doen?
Waarom plaats je niet gewoon een uitvoerbaar bestand ergens in mijn $PATH?
~/.local/bin directory
wordt theoretisch verwacht in uw $PATH
.
Volgens deze mensenis het een bugvoegt het niet toe aan $PATH
bij gebruik van systemd
.
Dit antwoordlegt het uitgebreider uit.
Maar zelfs alsuw distro dedirectory ~/.local/bin
naar de $PATH
, het kan de volgende vorm hebben (binnen ~/.profile
):
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
waarvoor u uitloggen en opnieuw moet inloggen, de eerste keer dat de directory wordt aangemaakt.