Wat is het doel van pip install –user ?

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 --userin 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.

--usermaakt in plaats daarvan pip-installatiepakketten in uw homedirectory, waarvoor geen speciale privileges nodig zijn.


Antwoord 2, autoriteit 12%

--userinstalleert 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_profilebestand):

export PATH=$PATH:/Users/.../Library/Python/2.7/bin

Antwoord 3, autoriteit 7%

Andere antwoorden vermelden site.USER_SITEals 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, --useris momenteel niet geldig in de pipvan een virtuele omgeving, aangezien een gebruikerslocatie niet echt logisch is voor een virtuele omgeving.

Gebruik pip install --user some_pkgdus niet in een virtuele omgeving, anders wordt de pipvan de virtuele omgeving verward. Zie dit antwoordvoor meer details.


Antwoord 5, autoriteit 6%

Zonder virtuele omgevingen

pip <command> --userwijzigt 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.

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 --userde 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 van pip.

Met virtuele omgevingen

De optie --userin 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 --usergebruikt, 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\scriptsvoor mij met Python 3.7).

U hebt echter geen toegang tot een systeem of gebruikersinstallatie vanuit een virtuele omgeving (zelfs als u --usergebruikt 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 --useris niet geldig voor elk commando. Bijvoorbeeld pip uninstallzal pakketten vinden en verwijderen waar ze ook geïnstalleerd waren (in de gebruikersmap, virtuele omgevingsmap, etc.) en de --useroptie is niet geldig.

Dingen die zijn geïnstalleerd met pip install --userworden 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 --userwijzigt allepip-commando’s die het accepteren om de installatiemap van de gebruiker te zien/werken, dus als u pip list --userhet zal alleenpakketten tonen die zijn geïnstalleerd met pip install --user.


Antwoord 6, autoriteit 4%

De beste manier om dit te doen, is virtualenvte installeren en de verwarring van --userniet 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 --userom 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 sudovereist. 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/bineen 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/binsudonodig is, wat de deur opent naar het maken van een kostbare fout met de systeembibliotheken. Dus installeren in ~/.local/binis 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 rootnaar user? Dit zou voorkomen dat u sudohoeft 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 directorywordt theoretisch verwacht in uw $PATH.

Volgens deze mensenis het een bugvoegt het niet toe aan $PATHbij gebruik van systemd.

Dit antwoordlegt het uitgebreider uit.

Maar zelfs alsuw distro dedirectory ~/.local/binnaar 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes