Od 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.)
Dokumentacja dla site.USER_BASE to przerażający tunel czasoprzestrzenny o interesującym * temacie NIX, którego nie rozumiem.
Do czego służy --user
zwykły angielski? Dlaczego intallowanie pakietu ma ~/.local/
znaczenie? Dlaczego po prostu nie umieścić pliku wykonywalnego gdzieś w mojej $ PATH?
python
python-3.x
pip
virtualenv
Rob Truxal
źródło
źródło
import site; print site.USER_SITE
wydrukować lokalizację instalacji. Dla mnie mam/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
jest domyślnym katalogiem dla pakietów instalowanych przez pip . Ale jeśli jeden użytkownik chce zainstalować pakiety specyficzne dla użytkownika, może z niego skorzystać$ sudo pip3 --user install some_package
. Ten pakiet pozostanie niedostępny dla grup i innych osób uzyskujących dostęp do tego hosta.Odpowiedzi:
pip domyślnie instaluje pakiety Pythona w katalogu systemowym (np.
/usr/local/lib/python3.4
). Wymaga to dostępu do konta root.--user
sprawia, że pip instaluje pakiety w twoim katalogu domowym, co nie wymaga żadnych specjalnych uprawnień.źródło
--user
warto upewnić się, że nie uruchamia się pakietu jako root? (Wyobrażam sobie coś podobnego do opcji Wireshark / kismet / burpsuite, aby skonfigurować zasady dostępu do grupy, a tym samym nie zezwalać, aby wszystkie funkcje programu działały jako root. Czy to na właściwej ścieżce?) Czy to--user
tylko opcja aby umożliwić instalację bez uprawnień administratora? Jeśli tak jest, dlaczego nigdy nie użyjęsudo pip install foo_package
? Nigdy wcześniej nie potrzebowałem root-privilages do instalacji za pośrednictwem pip.--user
jest izolacja użytkownika! To sprawia, że jest to przesądnie uzasadnione. Dzięki @NDEthos!pip freeze --user
?--user
instaluje się wsite.USER_SITE
.W moim przypadku tak było
/Users/.../Library/Python/2.7/bin
. Dodałem to do mojej ŚCIEŻKI (w~/.bash_profile
pliku):źródło
Inne odpowiedzi wspominają,
site.USER_SITE
gdzie umieszczane są pakiety Pythona. Jeśli szukasz plików binarnych, wejdą one{site.USER_BASE}/bin
.Jeśli chcesz dodać ten katalog do ścieżki wyszukiwania powłoki, użyj:
źródło
Tylko ostrzeżenie:
Zgodnie z tym problemem ,
--user
obecnie nie jest ważny w wirtualnej envpip
, ponieważ lokalizacja użytkownika nie ma sensu w środowisku wirtualnym.Więc nie używaj
pip install --user some_pkg
w środowisku wirtualnym , w przeciwnym razie środowiska wirtualnepip
będą mylone. Zobacz tę odpowiedź, aby uzyskać więcej informacji.źródło
Najlepszym sposobem jest instalacja
virtualenv
i nie wymaga--user
zamieszania. Zyskasz większą elastyczność i nie będziesz się martwić o blokowanie różnych wersji i projektów Pythona za każdym razem, gdy instalujesz pakiet.https://virtualenv.pypa.io/en/stable/
źródło
W systemie macOS powodem użycia
--user
flagi jest upewnienie się, że nie uszkodzimy bibliotek, na których opiera się system operacyjny. Konserwatywne podejście do wielu użytkowników MacOS jest unikanie instalowania lub aktualizowania PIP z poleceniem, które wymagająsudo
. Dlatego obejmuje to instalację do/usr/local/bin
...Ref: Instalowanie Pythona dla Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
Nie mam wszystko jasne, dlaczego zainstalowanie na
/usr/local/bin
ryzyko na Mac biorąc pod uwagę fakt, że system opiera się tylko na plikach binarnych Python w/Library/Frameworks/
i/usr/bin
. Podejrzewam, że dzieje się tak, ponieważ, jak wspomniano powyżej, instalacja w/usr/local/bin
wymaga,sudo
co otwiera drogę do popełnienia kosztownego błędu w bibliotekach systemowych. Dlatego zainstalowanie w~/.local/bin
to pewny sposób ognia, aby uniknąć tego ryzyka.Ref: Używanie Pythona na komputerze Mac ( https://docs.python.org/2/using/mac.html )
Wreszcie, o ile korzyści płynące z instalowania pakietów w
/usr/local/bin
, zastanawiam się, czy sensowne jest zmienić właściciela katalogu zroot
nauser
? Pozwoliłoby to uniknąć konieczności używania,sudo
jednocześnie chroniąc przed wprowadzaniem zmian zależnych od systemu. * Czy to domyślne ustawienie bezpieczeństwa jest reliktem tego, jak systemy Unix były częściej używane w przeszłości (jako serwery)? A przynajmniej dobra droga dla użytkowników komputerów Mac, którzy nie hostują serwera?* Uwaga: Wydaje się, że funkcja ochrony integralności systemu (SIP) komputera Mac chroni użytkownika przed zmianą bibliotek zależnych od systemu.
- E
źródło
Bez środowisk wirtualnych
pip <command> --user
zmienia zakres bieżącej komendy pip, tak aby działała na lokalnej lokalizacji instalacji lokalnego konta python użytkownika, a nie na lokalizacji instalacji całego systemu, która jest domyślna.To naprawdę ma znaczenie tylko na komputerze z wieloma użytkownikami. Wszystko, co zostanie zainstalowane w lokalizacji systemu, będzie widoczne dla wszystkich użytkowników, więc instalacja w lokalizacji użytkownika sprawi, że instalacja pakietu będzie oddzielona od innych użytkowników (nie będą go widzieć i będą musieli zainstalować go osobno, aby z niego korzystać). Ponieważ mogą występować konflikty wersji, instalacja pakietu z zależnościami wymaganymi przez inne pakiety może powodować problemy, dlatego najlepiej nie wypychać wszystkich pakietów, których dany użytkownik używa do lokalizacji instalacji systemu.
--user
lokalizacji . Zostanie zainstalowany w innym folderze, który może, ale nie musi, zostać dodany do ścieżki, w zależności od pakietu i sposobu jego użycia (wiele pakietów instaluje narzędzia wiersza polecenia, które muszą znajdować się na ścieżce, aby uruchomić się z powłoki) .--user
preferowane jest używanie roota / sudo lub wymaganie instalacji administratora i wpływanie na środowisko Python każdego użytkownika, z wyjątkiem przypadków ogólnych pakietów, które administrator chce domyślnie udostępnić wszystkim użytkownikom.apt
, zamiastpip
.Z wirtualnymi środowiskami
venv
poleceniu w dokumentacji Python VENV .--user
Opcja w aktywnym środowisku venv / virtualenv zainstaluje do lokalnej lokalizacji python użytkownik (taki sam jak bez środowisku wirtualnym).Pakiety są domyślnie instalowane w środowisku wirtualnym, ale jeśli
--user
go użyjesz , wymusi to instalację poza środowiskami wirtualnymi, w katalogu skryptów użytkowników Pythona (w systemie Windows jest to obecniec:\users\<username>\appdata\roaming\python\python37\scripts
dla mnie w Pythonie 3.7).Jednak nie będzie można uzyskać dostępu do instalacji systemu lub użytkownika z poziomu środowiska wirtualnego (nawet jeśli był używany
--user
w środowisku wirtualnym).Jeśli zainstalujesz środowisko wirtualne z
--system-site-packages
argumentem, będziesz miał dostęp do folderu skryptów systemowych dla Pythona. Wydaje mi się, że dotyczy to również folderu skryptu python użytkownika, ale nie jestem pewien. Może to jednak mieć niezamierzone konsekwencje i nie jest to zamierzony sposób korzystania ze środowisk wirtualnych.Lokalizacja systemu Python i folderów instalacji lokalnych użytkowników
Możesz znaleźć lokalizację folderu instalacyjnego użytkownika dla Pythona za pomocą
python -m site --user-base
. Znajduję sprzeczne informacje w pytaniach i odpowiedziach, dokumentacji i faktycznie używam tego polecenia na komputerze, aby określić, jakie są ustawienia domyślne, ale znajdują się one w katalogu osobistym użytkownika (~
skrót w * nix ic:\users\<username>
zazwyczaj w systemie Windows).Inne szczegóły
--user
Opcja nie jest ważna dla każdego polecenia. Na przykładpip uninstall
znajdzie i odinstaluje pakiety, gdziekolwiek zostały zainstalowane (w folderze użytkownika, folderze środowiska wirtualnego itp.), A--user
opcja jest nieprawidłowa.Rzeczy zainstalowane z
pip install --user
zostaną zainstalowane w lokalizacji lokalnej, która będzie widoczna tylko dla bieżącego konta użytkownika i nie będzie wymagała dostępu do konta root (w * nix) ani dostępu administratora (w systemie Windows).W
--user
modyfikuje opcja wszystkiepip
polecenia, które akceptują go zobaczyć / działające na użytkownika zainstalować folderu, więc jeśli używaszpip list --user
to tylko pokazać Pakiety zainstalowanepip install --user
.źródło
pip install
z niego--user
całkowicie. Spowodowałoby to zainstalowanie pakietów Pythona w miejscach, które naprawdę powinny zostać pozostawione menedżerowi pakietów systemu (na przykładapt
w Debian / Ubuntu). Lepiej nie zadzierać z tym problemem, prowadzi to do wielu problemów. Jeśli pakiet Python musi być dostępny dla wszystkich użytkowników, użyj menedżera pakietów systemu operacyjnego, ale nie rób tegosudo pip install ...
. Alternatywą jestsudo pip install --target ...
. W systemie Windows jest to mniejszy problem.~/.local/bin directory
teoretycznie oczekuje się, że będzie w twoim$PATH
.Według tych osób jest to błąd, który nie dodaje go w
$PATH
trakcie używaniasystemd
.Ta odpowiedź wyjaśnia ją szerzej.
Ale nawet jeśli twoja dystrybucja zawiera ten
~/.local/bin
katalog do$PATH
, być może w postaci następującej (wewnątrz~/.profile
):co wymagałoby wylogowania i ponownego zalogowania , jeśli katalogu nie było wcześniej.
źródło