Wiem, że oczywistą odpowiedzią jest użycie virtualenv i virtualenvwrapper, ale z różnych powodów nie mogę / nie chcę tego robić.
Jak więc zmodyfikować polecenie
pip install package_name
zrobić pip
instalację pakietu w innym miejscu niż domyślny site-packages
?
pip
NIE próbować usuwać starszej wersji z katalogu niestandardowego. Na przykład - systemowy, w którym nie masz uprawnień do zapisu. Do tej pory robiłem to tylko zeasy_install
...--ignore-installed
opcji powinno uniemożliwić pipowi próbę odinstalowania już zainstalowanych pakietów.mkvirtualenv --python=/usr/bin/python3.5 env_name
Odpowiedzi:
Posługiwać się:
Możesz także użyć tej opcji
--ignore-installed
do wymuszenia ponownej instalacji wszystkich zależności przy użyciu tego nowego prefiksu. Możesz użyć--install-option
wielokrotnie, aby dodać dowolną opcję, której możesz użyćpython setup.py install
(--prefix
prawdopodobnie jest to, czego chcesz, ale jest jeszcze kilka opcji, których możesz użyć).źródło
pip freeze
aby zobaczyć alternatywny katalog?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
powinno to zobaczyć.--prefix=$PREFIX_PATH
Wydaje się, że używanie nie pozwala na pełną kontrolę nad katalogiem instalacyjnym, ponieważ dołączany jest do niego przyrostek specyficzny dla systemu (\Lib\site-packages
na przykład w systemie Windows). Czy istnieje sposób na określenie konkretnego katalogu?--Target przełącznik jest rzeczą szukasz:
Ale trzeba jeszcze dodać
d:\somewhere\other\than\the\default
doPYTHONPATH
rzeczywiście z nich korzystać z tej lokalizacji.Zaktualizuj pip, jeśli przełącznik docelowy nie jest dostępny:
W systemie Linux lub OS X:
W systemie Windows (działa to w przypadku problemu ):
źródło
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
wspomnianym przez @Ian Bicking a--target=$PATH
opcją?target
jest opcją pip, a wszystko, co wpiszesz,install-option
zostanie przekazane dosetup.py install command
. Zasadniczotarget
jest to lokalizacja niestandardowych pakietów witryn.--target
może spowodować częściową instalację, ponieważ nie spowoduje instalacji żadnych skryptów / plików danych w określonym prefiksie. Wydaje się, przechodząc--prefix
ze--install-option
jest to jedyny właściwy sposób, aby mieć pełną kontrolę nad zużytą instalacji prefiks.Zamiast
--target
opcji lub--install-options
opcji okazało się, że następujące działa dobrze (z dyskusji na temat błędu dotyczącego tej właśnie rzeczy na https://github.com/pypa/pip/issues/446 ):(Lub ustaw
PYTHONUSERBASE
katalog w swoim środowisku przed uruchomieniem polecenia, używającexport PYTHONUSERBASE=/path/to/install/to
)Używa bardzo przydatnych
--user
opcji, ale mówi, że należy wprowadzićbin
,lib
,share
i inne katalogi można oczekiwać pod niestandardowym zamiast prefiksu$HOME/.local
.Następnie można dodać do tego
PATH
,PYTHONPATH
i innych zmiennych, tak jak normalny katalog instalacyjny.Pamiętaj, że może być konieczne określenie opcji
--upgrade
i,--ignore-installed
jeśli jakiekolwiek pakiety, od których to zależy, wymagają zainstalowania nowszych wersji wPYTHONUSERBASE
katalogu, aby zastąpić wersje dostarczone przez system.Pełny przykład:
.. aby zainstalować
scipy
inumpy
spakować najnowsze wersje do katalogu, który możesz następnie dołączyć do swojegoPYTHONPATH
podobnego (używając bash i dla Pythona 2.6 na CentOS 6 w tym przykładzie):Korzystanie z virtualenv jest wciąż lepszym i schludniejszym rozwiązaniem!
źródło
/bin
folder, który tworzy pip,--user
tworzy go tak, jak robi,--PREFIX
a--target
nie robi.--ignore-installed
jest potrzebny.--editable
lokalnymi instalacjami.su
niego (co może być problematyczne na przykład w kontenerach).Instalowanie pakietu Python często obejmuje tylko niektóre czyste pliki Pythona. Jeśli pakiet zawiera dane, skrypty i / lub pliki wykonywalne, są one instalowane w różnych katalogach niż pliki czystego języka Python.
Zakładając, że twój pakiet nie ma danych / skryptów / plików wykonywalnych i że chcesz, aby twoje pliki Pythona były przenoszone
/python/packages/package_name
(a nie niektóre podkatalogi kilka poziomów poniżej/python/packages
jak podczas korzystania--prefix
), możesz użyć polecenia jednorazowego:Jeśli chcesz, aby wszystkie (lub większość) pakietów tam
~/.pip/pip.conf
się znalazło , możesz je edytować, aby uwzględnić:W ten sposób nie możesz zapomnieć o konieczności powtarzania tego.
Wszelkie pliki excecutables / data / scripts zawarte w pakiecie nadal będą znajdować się w domyślnych miejscach, chyba że określisz dodatkowe opcje instalacji (
--prefix
/--install-data
/--install-scripts
itp., Aby poznać szczegóły, patrz opcje instalacji niestandardowej ).źródło
--prefix
tam osobiście , ponieważ mam katalog „lokalny” na wspólnym serwerze w katalogu domowym i był on używany jako prefikseasy_install
przed przejściem dopip
. System$PATH
i$PYTHONPATH
zostały wcześniej skonfigurowane. Zamiast tegoinstall-option=--install-purelib=/blah
jest ta nowszatarget=/blah
opcja / przełącznik. Jest to również miłe, ale czasami potrzebujesz tylko zamiennika--prefix
, którego możesz użyć zsetup.py
lubeasy_install
.Aby pip zainstalować bibliotekę dokładnie tam, gdzie chciałem, przeszedłem do lokalizacji, w której chciałem, a następnie użyłem katalogu z terminalem
logikę, którą wziąłem z tej strony: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
źródło
-t
jest skrótem--target
Wydaje się, że nikt nie wspomniał o opcji -t, ale jest to najłatwiejsze:
źródło
-t
Opcja jest krótka wersja--target
wariantu, który został opisany w innym Odpowiedź ( stackoverflow.com/a/19404371/594053 ) :)Wystarczy dodać jeden punkt do odpowiedzi @Ian Bicking:
Korzystanie z
--user
opcji określania zainstalowanego katalogu działa również, jeśli chce się zainstalować pakiet Pythona w swoim katalogu domowym (bez prawa użytkownika sudo) na zdalnym serwerze.Na przykład,
Polecenie zainstaluje pakiet w jednym z katalogów wymienionych w ścieżce PYTHONPATH.
źródło
Testowałem te opcje z python3.5 i pip 9.0.3:
pip install --target / myfolder [pakiety]
Instaluje WSZYSTKIE pakiety, w tym zależności w / myfolder. Nie bierze pod uwagę, że pakiety zależne są już zainstalowane gdzie indziej w Pythonie. Znajdziesz pakiety z / myfolder / [nazwa_pakietu]. Jeśli masz wiele wersji Pythona, nie bierze to pod uwagę (brak wersji Pythona w nazwie folderu pakietu).
pip install --prefix / myfolder [pakiety]
Czeki to już zainstalowane zależności. Zainstaluje pakiety w /myfolder/lib/python3.5/site-packages/[packages]
pip install --root / myfolder [pakiety]
Sprawdza zależności, takie jak --prefix, ale lokalizacją instalacji będzie /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [pakiety]
Zainstaluje pakiety w $ HOME: /home/[USER]/.local/lib/python3.5/site-packages Python automatycznie wyszukuje z tej ścieżki .local, więc nie musisz umieszczać go w PYTHONPATH.
=> W większości przypadków najlepszym wyborem jest użytkownik. W przypadku, gdy z jakiegoś powodu nie można użyć folderu domowego, należy - przedrostek.
źródło
Nowsze wersje
pip
(8 lub nowsze) mogą bezpośrednio korzystać z--prefix
opcji :gdzie
$PREFIX_PATH
jest prefiksem instalacji, w którym znajdują się lib, bin i inne foldery najwyższego poziomu.źródło
lub
źródło
Aby dodać do i tak dobrej porady, ponieważ miałem problem z instalacją IPython, gdy nie miałem uprawnień do zapisu
/usr/local
.pip używa distutils do instalacji, a ten wątek omawia, w jaki sposób może to powodować problem, ponieważ zależy od tego
sys.prefix
ustawienia.Mój problem wystąpił, gdy instalacja IPython próbowała pisać do „/ usr / local / share / man / man1” z odmową zezwolenia . Ponieważ instalacja się nie powiodła, wydawało się, że nie zapisuje plików IPython w katalogu bin.
Używanie „--user” działało, a pliki były zapisywane w ~ / .local. Dodanie ~ / .local / bin do $ PATH oznaczało, że mogłem użyć „ipython”.
Jednak próbuję zainstalować to dla wielu użytkowników i otrzymałem uprawnienia do zapisu w
/usr/local/lib/python2.7
katalogu. Utworzyłem tam katalog „bin” i ustawiłem dyrektywy dla distutils:następnie (
-I
służy do wymuszenia instalacji pomimo poprzednich awarii / instalacji lokalnej):Potem dodałem
/usr/local/lib/python2.7/bin
do$PATH
.Pomyślałem, że dołączę to na wypadek, gdyby ktoś miał podobne problemy na komputerze, do którego nie ma dostępu sudo.
źródło
Jeśli używasz naparu z pytonem, niestety pip / pip3 jest dostarczany z bardzo ograniczonymi opcjami. Nie masz opcji --install-option, --target, --user, jak wspomniano powyżej.
Może się okazać, że ta linia jest bardzo niewygodna. Sugeruję używać pyenv do zarządzania. Jeśli używasz
brew upgrade python python3
Ironicznie jesteś rzeczywiście obniżyć funkcjonalność PIP.
(Publikuję tę odpowiedź, po prostu dlatego, że pip w moim Mac OSX nie ma opcji --target i spędziłem godziny na jej poprawianiu)
źródło
ignore-installed
powodu poprzednich wysiłków, zadziałała dla mnie:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Z pipem
v1.5.6
w Pythoniev2.7.3
(GNU / Linux) opcja--root
pozwala określić globalny prefiks instalacji (najwyraźniej) niezależnie od opcji konkretnego pakietu. Wypróbuj fi,źródło
Proponuję postępować zgodnie z dokumentacją i utworzyć plik ~ / .pip / pip.conf. Uwaga: w dokumentacji brakuje określonego katalogu nagłówka, co prowadzi do następującego błędu:
Pełna robocza zawartość pliku conf to:
Niestety mogę zainstalować, ale kiedy próbuję odinstalować, pip mówi mi, że nie ma takiego pakietu do odinstalowania ... więc coś jest nadal nie tak, ale pakiet trafia do wcześniej zdefiniowanej lokalizacji.
źródło
pip install /path/to/package/
jest teraz możliwe.
Różnica polega na tym, że użycie flagi
-e
lub--editable
polega na tym, że-e
linki do miejsca, w którym pakiet jest zapisany (tj. Folder pobranych plików), zamiast instalowania go na ścieżce Pythona.Oznacza to, że jeśli usuniesz / przeniesiesz pakiet do innego folderu, nie będziesz mógł go używać.
źródło
Znalazłem prosty sposób
źródło - https://pip.pypa.io/en/stable/reference/pip_install/
Próbowałem z pip3 i działa!
źródło