Установить пакет Python в другой каталог, используя pip? - PullRequest
365 голосов
/ 26 мая 2010

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

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

pip install package_name

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

Ответы [ 15 ]

3 голосов
/ 29 мая 2015

Чтобы добавить и без того хороший совет, так как у меня возникла проблема с установкой 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.

0 голосов
/ 18 января 2019

pip install /path/to/package/

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

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

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

0 голосов
/ 17 сентября 2018

Если вы используете 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

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

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

0 голосов
/ 05 декабря 2017

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

0 голосов
/ 18 августа 2014

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

$ pip install --root=/alternative/prefix/path package_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...