Установить пакет Python в другой каталог, используя pip?

Я знаю, что очевидный ответ - использовать virtualenv и virtualenvwrapper, но по разным причинам я не могу / не хочу этого делать.

Так как мне изменить команду

pip install package_name

делать pip установить пакет где-нибудь, кроме по умолчанию site-packages?

20 ответов

Решение

Использование:

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

Вы также можете использовать --ignore-installed принудительно переустановить все зависимости, используя этот новый префикс. Ты можешь использовать --install-option несколько раз, чтобы добавить любой из вариантов, которые вы можете использовать с python setup.py install (--prefix это, вероятно, то, что вы хотите, но есть еще несколько вариантов, которые вы можете использовать).

Ключ --target - это то, что вы ищете:

pip install --target = d: \ где-то \ отличное \ чем \ имя_пакета \ default

Но вам все равно нужно добавить d:\somewhere\other\than\the\default в PYTHONPATH на самом деле использовать их из этого места.


Обновите пункт, если целевой переключатель недоступен:

В Linux или OS X:

pip install -U pip

В Windows (это решает проблему):

python -m pip install -U pip

Вместо --target вариант или --install-options Опция, я обнаружил, что следующее работает хорошо (из обсуждения ошибки, касающейся этой самой вещи на https://github.com/pypa/pip/issues/446):

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

(Или установите PYTHONUSERBASE каталог в вашей среде перед запуском команды, используя export PYTHONUSERBASE=/path/to/install/to)

Это использует очень полезный --user вариант, но говорит, что сделать bin, lib, share и другие каталоги, которые вы ожидаете под пользовательским префиксом, а не $HOME/.local,

Затем вы можете добавить это к вашему PATH, PYTHONPATH и другие переменные, как в обычном каталоге установки.

Обратите внимание, что вам также может понадобиться указать --upgrade а также --ignore-installed опций, если любые пакеты, от которых это зависит, требуют установки более новых версий в PYTHONUSERBASE каталог, чтобы переопределить предоставленные системой версии.

Полный пример:

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

... чтобы установить scipy а также numpy упаковать самые последние версии в каталог, который вы можете затем включить в свой PYTHONPATH вот так (используя bash и для python 2.6 в CentOS 6 для этого примера):

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

Использование virtualenv - все еще лучшее и более аккуратное решение!

Чтобы установить библиотеку точно там, где я хотел, я перешел в то место, где я хотел, каталог с терминалом, а затем использовал

pip install mylibraryName -t . 

логика, которую я взял с этой страницы: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

Установка пакета Python часто включает только некоторые чистые файлы Python. Если пакет содержит данные, сценарии и / или исполняемые файлы, они устанавливаются в разные каталоги из чистых файлов Python.

Предполагая, что в вашем пакете нет данных / скриптов / исполняемых файлов, и что вы хотите, чтобы ваши файлы Python помещались в /python/packages/package_name (а не какой-то подкаталог несколькими уровнями ниже /python/packages как при использовании --prefix), вы можете использовать однократную команду:

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

Если вы хотите, чтобы все (или большинство) ваших пакетов были там, вы можете отредактировать ~/.pip/pip.conf включать:

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

Таким образом, вы не можете забыть о необходимости указывать это снова и снова.

Все исключительные файлы / данные / сценарии, включенные в пакет, будут по-прежнему отправляться в места по умолчанию, если вы не укажете дополнительные параметры установки (--prefix / --install-data / --install-scripts и т. д., для получения подробной информации смотрите пользовательские параметры установки).

Протестировал эти опции с python3.5 и pip 9.0.3:

pip install --target / myfolder [пакеты]

Устанавливает ВСЕ пакеты, включая зависимости в / myfolder. Не учитывает, что зависимые пакеты уже установлены в других местах Python. Вы найдете пакеты из / myfolder / [имя_пакета]. Если у вас несколько версий Python, это не учитывается (версия Python в имени папки пакета отсутствует).

pip install --prefix / myfolder [пакеты]

Проверки - это уже установленные зависимости. Установит пакеты в /myfolder/lib/python3.5/site-packages/[packages]

pip install --root / myfolder [пакеты]

Проверяет зависимости, такие как --prefix, но место установки будет /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install --user [пакеты]

Устанавливает пакеты в $HOME: /home/[USER]/.local/lib/python3.5/site-packages. Python автоматически выполняет поиск по этому пути.local, поэтому вам не нужно помещать его в PYTHONPATH.

=> В большинстве случаев --user - лучший вариант для использования. Если домашняя папка не может быть использована по какой-либо причине, тогда --prefix.

Я нашел простой способ

pip3 install "package_name" -t "target_dir"

источник - https://pip.pypa.io/en/stable/reference/pip_install/

-t переключатель = цель

Никто, кажется, не упомянул опцию -t, но это самое простое:

pip install -t <direct directory> <package>
pip install packageName -t pathOfDirectory

или же

pip install packageName --target pathOfDirectorty

Просто добавьте одно очко к ответу @Ian Bicking:

С использованием --user Опция указания установленного каталога также работает, если вы хотите установить какой-либо пакет Python в свой домашний каталог (без права пользователя sudo) на удаленном сервере.

Например,

pip install --user python-memcached

Команда установит пакет в один из каталогов, перечисленных в вашей PYTHONPATH.

Более новые версии pip (8 или позже) может напрямую использовать --prefix вариант:

pip install --prefix=$PREFIX_PATH package_name

где $PREFIX_PATH это префикс установки, в который помещаются lib, bin и другие папки верхнего уровня.

В дополнение к уже хорошему совету, так как у меня была проблема с установкой IPython, когда у меня не было прав на запись в /usr/local,

pip использует distutils для своей установки, и в этом потоке обсуждается, как это может вызвать проблему, поскольку он полагается на sys.prefix установка.

Моя проблема произошла, когда установка IPython пыталась записать в '/usr/local/share/man/man1' с отказом в разрешении. Поскольку установка не удалась, похоже, что файлы IPython не записывались в каталог bin.

Использование "--user" сработало, и файлы были записаны в ~/.local. Добавление ~/.local/bin в $PATH означало, что я мог бы использовать "ipython" оттуда.

Однако я пытаюсь установить это для ряда пользователей и получил разрешение на запись в /usr/local/lib/python2.7 каталог. Там я создал каталог bin и установил директивы для distutils:

vim ~/.pydistutils.cfg

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

затем (-I используется для принудительной установки, несмотря на предыдущие ошибки /.local install):

pip install -I ipython

Потом я добавил /usr/local/lib/python2.7/bin в $PATH,

Я думал, что включу это в случае, если у кого-то еще есть подобные проблемы на машине, к которой у них нет доступа sudo.

Если вы используете brew с python, к сожалению, pip/pip3 поставляется с очень ограниченными возможностями. У вас нет опций --install-option, --target, --user, как указано выше.

Замечание по установке pip --user
Обычная установка pip --user отключена для готового Python. Это из-за ошибки в distutils, потому что Homebrew пишет distutils.cfg, который устанавливает префикс пакета. Возможный обходной путь (который помещает исполняемые скрипты в ~/Library/Python/./bin): python -m pip install --user --install-option="--prefix=" <package-name>

Вы можете найти эту строку очень громоздкой. Я предлагаю использовать pyenv для управления. Если вы используете

brew upgrade python python3

По иронии судьбы вы на самом деле понижаете функциональность пипса.

(Я публикую этот ответ просто потому, что pip в моем Mac OSX не имеет опции --target, и я потратил часы на ее исправление)

pip install /path/to/package/

теперь возможно.

Разница с этим и использованием -e или же --editable флаг это -e ссылки на то, где сохранен пакет (т. е. ваша папка для скачивания), а не на его установку в путь к Python.

Это означает, что если вы удалите / переместите пакет в другую папку, вы не сможете его использовать.

Я предлагаю следовать документации и создать файл ~/.pip/pip.conf. Обратите внимание, что в документации отсутствует указанная директория заголовка, что приводит к следующей ошибке:

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

Полный рабочий контент файла conf:

[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

К сожалению, я могу установить, но при попытке удалить pip сообщает, что такого пакета для процесса удаления не существует.... поэтому что-то все равно не так, но пакет идет в предопределенное место.

С пипом v1.5.6 на питоне v2.7.3 (GNU/Linux), опция --root позволяет указать глобальный префикс установки (по-видимому) независимо от параметров конкретного пакета. Попробуй фи,

$ pip install --root=/alternative/prefix/path package_name

system`, который установит пакеты пакетов pip в / usr / local / bin, доступный для всех пользователей. Установка без этой опции может не работать для всех пользователей, поскольку все идет в конкретный каталог пользователя, например $HOME / .local / bin, а затем это установка для конкретного пользователя, которая должна быть повторена для всех пользователей, также могут быть проблемы с путями, если они не установлены для пользователей корзины работать не будут. Итак, если вы ищете всех пользователей - вам нужен доступ sudo:

      sudo su - 
python3 -m pip install --system <module>
logout
log back in 
which <module-bin> --> it should be installed on /usr/local/bin/

Использовать:

pip install package_name -t directory_path

Если вы получили следующую ошибку:

ОШИБКА: невозможно объединить «--user» и «--target».

Использовать:

pip install package_name -t directory_path --no-user

например pip install pandas -t C:\Users\user\Desktop\Family\test --no-user

Иногда работает только с аргументом Cache

      -m pip install -U pip --target=C:\xxx\python\lib\site-packages Pillow --cache-dir C:\tmp

используйте venv по умолчанию, сторонний vitrualenv или virtualenvwrapper в будущем будет больно

Другие вопросы по тегам