Zainstalować pakiet Pythona w innym katalogu za pomocą pip?

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

Aby pip zainstalować pakiet w innym miejscu niż domyślne site-packages?

 471
Author: Peter Mortensen, 2010-05-26

16 answers

Użycie:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

Możesz również użyć --ignore-installed, Aby wymusić ponowne zainstalowanie wszystkich zależności przy użyciu tego nowego prefiksu. Możesz użyć --install-option do wielu razy, aby dodać dowolną z opcji, z których możesz korzystać python setup.py install (--prefix prawdopodobnie jest to, co chcesz, ale istnieje kilka więcej opcji można użyć).

 346
Author: Ian Bicking,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-26 19:59:36

The --target switch is the thing you ' re looking for:

pip install --target=d:\somewhere\other\than\the\default package_name

Ale nadal musisz dodać d:\somewhere\other\than\the\default do PYTHONPATH, aby faktycznie używać ich z tej lokalizacji.

-t, -- target


Instalowanie pakietów w katalogu

. Domyślnie nie zastąpi to istniejących plików / folderów w .
Użyj opcji -- upgrade, aby zastąpić istniejące pakiety w nowymi wersjami.

Uaktualnij pip, jeśli przełącznik docelowy nie jest dostępny:

Na Linuksie lub OS X:

pip install -U pip

W systemie Windows (działa to wokół problemu):

python -m pip install -U pip
 617
Author: Janusz Skonieczny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-09 18:28:20

Zamiast opcji --target lub opcji --install-options, odkryłem, że poniższa opcja działa dobrze (z dyskusji na temat błędu dotyczącego tej rzeczy w https://github.com/pypa/pip/issues/446):

PYTHONUSERBASE=/path/to/install/to pip install --user

(lub ustaw katalog PYTHONUSERBASE w swoim środowisku przed uruchomieniem polecenia, używając export PYTHONUSERBASE=/path/to/install/to)

Używa bardzo przydatnej opcji --user, ale mówi, Aby bin, lib, share i inne katalogi, których można oczekiwać pod prefiksem niestandardowym, a nie $HOME/.local.

Następnie możesz dodać to do swojego PATH, PYTHONPATH i innych zmiennych, tak jak w normalnym katalogu instalacyjnym.

zauważ, że może być również konieczne podanie opcji --upgrade i --ignore-installed, Jeśli Pakiety, od których to zależy, wymagają zainstalowania nowszych wersji w katalogu PYTHONUSERBASE, aby nadpisać wersje dostarczane przez system.

Pełny przykład:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

.. aby zainstalować pakiet scipy i numpy najnowsze wersje do katalogu, który możesz następnie umieścić w swoim PYTHONPATH w ten sposób (używając bash i dla Pythona 2.6 na CentOS 6 dla tego przykładu):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

korzystanie z virtualenv jest wciąż lepszym i schludniejszym rozwiązaniem!

 79
Author: David Gardner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-23 09:07:40

Instalacja pakietu Pythona często zawiera tylko niektóre czyste pliki Pythona. Jeśli pakiet zawiera dane, skrypty i pliki wykonywalne, są one instalowane w różnych katalogach z czystych plików Pythona.

Zakładając, że Twój Pakiet nie ma danych / skryptów/plików wykonywalnych, i że chcesz, aby pliki Pythona trafiały do /python/packages/package_name (a nie do podkatalogu kilka poziomów poniżej /python/packages jak w przypadku --prefix), możesz użyć polecenia one time:

pip install --install-option="--install-purelib=/python/packages" package_name

Jeśli chcesz wszystkich (lub większość) swoich pakiety, aby tam wejść, możesz edytować ~/.pip/pip.conf, aby dołączyć:

[install]
install-option=--install-purelib=/python/packages

W ten sposób nie można zapomnieć o konieczności określenia go ponownie i ponownie.

Wszelkie excecutables / data / scripts zawarte w pakiecie nadal będą trafiać do swoich domyślnych miejsc, chyba że podasz dodatkowe opcje instalacji (--prefix/--install-data/--install-scripts, itd., po szczegóły patrz opcje custom installation).

 44
Author: Anthon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 20:53:06

Aby zainstalować bibliotekę dokładnie tam, gdzie chciałem, nawigowałem do miejsca, w którym chciałem katalogu z terminalem, a następnie użyłem

pip install mylibraryName -t . 

Logika, którą wziąłem z tej strony: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

 36
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-31 17:46:36

Przetestowano te opcje z python3. 5 i pip 9.0.3:

Pip install --target / myfolder [Pakiety]

Instaluje wszystkie pakiety wraz z zależnościami w / myfolder. Nie bierze pod uwagę, że pakiety zależne są już zainstalowane gdzie indziej w Pythonie. Pakiety znajdziesz w /myfolderze/[nazwa_pakietu]. Jeśli masz kilka wersji Pythona, nie bierze to pod uwagę (nie ma wersji Pythona w nazwie folderu pakietu).

Pip install --prefix / myfolder [Pakiety]

Kontrole są już zainstalowanymi zależnościami. Zainstaluje pakiety do /myfolder / lib / python3.5/site-packages / [packages]

Pip install --root / myfolder [packages]

Sprawdza zależności, takie jak --prefix, ale lokalizacją instalacji będzie /myfolder/usr/local/lib/python3.5/site-packages/[nazwa_pakietu].

Pip install --user [packages]

Zainstaluje pakiety w $HOME: /home / [USER]/local / lib / python3. 5/site-packages Python wyszukuje automatycznie z tego .lokalna ścieżka, więc nie musisz umieszczać jej na swojej ścieżce PYTHONPATH.

= > w większości przypadków -- user jest najlepszą opcją do użycia. Jeśli z jakiegoś powodu nie można użyć katalogu domowego, to -- prefix.

 21
Author: Mikko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-20 14:17:38

Wydaje się, że nikt nie wspomniał o opcji-t, ale o najprostszej:

pip install -t <direct directory> <package>
 18
Author: Erwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 00:02:28

Wystarczy dodać jeden punkt do odpowiedzi @ Ian Bicking:

Użycie opcji --user aby określić zainstalowany katalog działa również, jeśli ktoś chce zainstalować jakiś pakiet Pythona w swoim katalogu domowym (bez prawa użytkownika sudo) na zdalnym serwerze.

Np.,

pip install --user python-memcached

Polecenie zainstaluje pakiet w jednym z katalogów wymienionych w PYTHONPATH.

 14
Author: Good Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 20:08:15

Nowsze wersje pip (8 lub nowsze) mogą bezpośrednio korzystać z --prefix Opcja :

pip install --prefix=$PREFIX_PATH package_name

Gdzie {[3] } jest prefiksem instalacji, gdzie znajdują się katalogi lib, bin i inne foldery najwyższego poziomu.

 13
Author: Mike T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 06:37:23
pip3 install "package_name" -t "target_dir"

Źródło - https://pip.pypa.io/en/stable/reference/pip_install/

- t switch = target

 13
Author: Samir Kape,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 04:25:30
pip install packageName -t pathOfDirectory

Lub

pip install packageName --target pathOfDirectorty
 11
Author: kundan kaushik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 09:06:38

Aby dodać do już dobrej rady, ponieważ miałem problem z instalacją IPython , gdy nie miałem uprawnień do zapisu do /usr/local.

Pip używa distutils do instalacji i ten wątek omawia, w jaki sposób może to spowodować problem, ponieważ opiera się na ustawieniu sys.prefix.

Mój problem pojawił się, gdy instalacja IPython próbowała napisać do '/usr/local/share/man/man1' z odmową pozwolenia. Ponieważ instalacja nie powiodła się, nie wydaje się, aby zapisać pliki IPython w katalog bin.

Użycie "--user " zadziałało, a pliki zostały zapisane do~/.lokalne. Dodanie ~/.local / bin to the $ PATH mean I could use "ipython" from there.

Jednak próbuję zainstalować to dla wielu użytkowników i otrzymałem uprawnienia zapisu do katalogu /usr/local/lib/python2.7. Utworzyłem pod nim katalog " bin " i ustawiłem dyrektywy dla distutils:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

Then (-I służy do wymuszenia instalacji pomimo wcześniejszych awarii/.local install):

pip install -I ipython

Wtedy Ja Dodano /usr/local/lib/python2.7/bin do $PATH.

Pomyślałem, że dołączę to na wypadek, gdyby ktoś inny miał podobne problemy na komputerze, do którego nie ma dostępu do sudo.

 4
Author: Stuart Brock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 20:57:42

Jeśli używasz brew z Pythonem, niestety, PIP/pip3 wysyła z bardzo ograniczonymi opcjami. Nie masz opcji -- install-option, -- target, --user, jak wspomniano powyżej.

Uwaga na pip install --user
Normalna instalacja pip -- user jest wyłączona dla Pythona. Jest to spowodowane błędem w distutils, ponieważ Homebrew pisze distutils.cfg, który ustawia prefiks pakietu. Możliwe obejście (które umieszcza Skrypty wykonywalne w ~ / Library / Python/./ bin) na: python -m pip install --user --install-option="--prefix=" <package-name>

Ta linia może być bardzo uciążliwa. Proponuję użyć pyenv do zarządzania. Jeśli używasz

brew upgrade python python3

Jak na ironię jesteś rzeczywiście downgrade funkcjonalność pip.

(zamieszczam tę odpowiedź, po prostu dlatego, że pip w moim mac osx nie ma opcji --target, i spędziłem wiele godzin naprawiając to)

 2
Author: anonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 13:28:35

Z pip v1.5.6 w Pythonie v2.7.3 (GNU/Linux), opcja --root pozwala określić prefiks instalacji globalnej, (najwyraźniej) niezależnie od opcji konkretnego pakietu. Try f. i.,

$ pip install --root=/alternative/prefix/path package_name
 0
Author: sphakka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-18 14:53:25

Proponuję postępować zgodnie z dokumentacją i utworzyć ~/.pip/pip.plik conf. Uwaga w dokumentacji brakuje określonego katalogu nagłówkowego, co prowadzi do następującego błędu:

error: install-base or install-platbase supplied, but installation scheme is incomplete

Pełna robocza zawartość pliku conf to:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Niestety mogę zainstalować, ale przy próbie odinstalowania pip mówi mi, że nie ma takiego pakietu dla procesu deinstalacji.... więc coś jest nadal nie tak, ale pakiet trafia do predefiniowanej lokalizacji.

 0
Author: kensai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-05 10:57:51

pip install /path/to/package/

Jest teraz możliwe.

Różnica pomiędzy tym i używaniem znacznika -e lub --editable polega na tym, że -e łączy się z miejscem zapisania pakietu (tj. z folderem pobrane pliki), zamiast instalować go w ścieżce Pythona.

Oznacza to, że jeśli usuniesz / przeniesiesz pakiet do innego folderu, nie będziesz mógł go użyć.

 -1
Author: A H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-18 08:37:47