Установить пакет Python в другой каталог с помощью pip?

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

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

pip install package_name

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

Ответы

Ответ 1

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

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

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

Ответ 2

Переключатель --target - это то, что вы ищете:

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

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

-t, --target <dir>
Установите пакеты в <dir>. По умолчанию это не заменит существующие файлы/папки в <dir>.
Используйте --upgrade для замены существующих пакетов в <dir> новыми версиями.


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

В Linux или OS X:

pip install -U pip

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

python -m pip install -U pip

Ответ 3

Вместо опции --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 по-прежнему является лучшим и более простым решением!

Ответ 4

Установка пакета 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

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

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

Ответ 5

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

pip install mylibraryName -t . 

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

Ответ 6

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

pip install -t <direct directory> <package>

Ответ 7

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

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

Например,

pip install --user python-memcached

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

Ответ 8

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

pip install --prefix=$PREFIX_PATH package_name

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

Ответ 9

pip install packageName -t pathOfDirectory

или же

pip install packageName --target pathOfDirectorty

Ответ 10

Протестировал эти опции с 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.

Ответ 11

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

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

Моя проблема произошла, когда установка IPython попыталась написать в '/usr/local/share/man/man1' с Разрешением Permission. По мере сбоя установки, похоже, что файлы 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.

Ответ 12

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

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

Ответ 13

Я предлагаю следовать документации и создавать файл ~/.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 говорит мне, что такого пакета для процесса удаления нет... так что что-то по-прежнему не так, но пакет переходит в его предопределенное местоположение.

Ответ 14

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

Примечание по установке в пипсах --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, и я потратил часы на ее исправление)

Ответ 15

pip install/path/to/package/

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

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

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