Установка пакетов pip в папку $ HOME

330

Является ли это возможным? При установке pipустановите пакеты python внутри моей $HOMEпапки. (например, я хочу установить mercurial, используя pip, но внутри $HOMEвместо /usr/local)

Я использую компьютер Mac и просто подумал об этой возможности, вместо того, чтобы «загрязнять» мою /usr/local, я бы использовал $HOMEвместо нее.

PEP370 именно об этом. Достаточно ли просто создать ˜/.localи pip install packageсделать эти пакеты для установки только в моей папке $ HOME?

Кто-то все еще использует тебя MS-DOS
источник
Вы проверили virtualenv? Вы можете установить пакеты с pip в изолированной среде.
joet3ch
2
Я думал об этом, но я хотел бы установить некоторые приложения python, используя существующий python (2.6.1), но вместо установки в / usr / local / установите в мою папку $ HOME и добавьте ее в $ PATH. Я хочу знать, возможно ли это, и любые предостережения такого подхода.
Кто-то все еще использует тебя MS-DOS
11
+1 за продвижение PEP370. Это простой, но полезный вариант, о котором должно знать больше людей.
Нед Дейли
Я боролся с подобной проблемой (возможно, вызванной неправильно сконфигурированным pip и easy_install для двух разных pyhtons). В крайнем случае я пытался использовать равнину $ python setup.py --user install. И это сработало. Пакет теперь установлен в домашнем subdir и все работает как положено. Придется поговорить с администратором моего сервера.
Ян Влчинский
1
Если вам нужно установить PIP, просто сделайте что-то вроде wget https://bootstrap.pypa.io/get-pip.pyследующего, python get-pip.pyи все готово. Может быть полезно, если вы работаете на машине, на которой установлен PIP слишком старый (для меня это было так). Смотрите pip.readthedocs.org/en/latest/install.html для получения дополнительной информации.
Маркус

Ответы:

463

Хотя вы можете использовать virtualenv, вам не нужно. Хитрость заключается в передаче --userаргумента PEP370 в setup.pyсценарий. С последней версией pip, один из способов сделать это:

pip install --user mercurial

Это должно привести к тому, что hgскрипт будет установлен, $HOME/.local/bin/hgа остальная часть пакета hg - в $HOME/.local/lib/pythonx.y/site-packages/.

Обратите внимание, что вышесказанное верно для Python 2.6. Среди разработчиков ядра Python возникли споры о том, какое расположение каталогов в Mac OS X подходит для установок в стиле PEP370 user. В Python 2.7 и 3.2 расположение в Mac OS X было изменено с $HOME/.localна $HOME/Library/Python. Это может измениться в будущем выпуске. Но на данный момент, на 2.7 (и 3.2, если hgбыли поддержаны на Python 3), вышеуказанные местоположения будут $HOME/Library/Python/x.y/bin/hgи $HOME/Library/Python/x.y/lib/python/site-packages.

Нед Дейли
источник
Хорошая точка зрения. К сожалению, в Python 2.7 есть ошибка, из-за которой PYTHONUSERBASE игнорируется при сборке фреймворка OS X. Это будет исправлено в Python 2.7.3.
Нед Дейли
1
Это выглядит очень интересно. easy_installустанавливается в Mac OS X по умолчанию, поэтому я бы установил только pip вне$HOME папки.
Кто-то все еще использует тебя MS-DOS
1
Я попытался изменить PYTHONUSERBASE в другое место. Нет успеха Как это делается на Windows конкретно?
Снерд
2
Помните, что если вы сделаете это, а затем попытаетесь использовать среды conda, файлы, установленные в .local всегда будут попадать первыми, что может привести к очень трудным отслеживанию ошибок импорта.
Tacaswell
12
Обратите внимание, что в OSX папка bin каталога сайта пользователя не находится в PATH. Это означает, что сценарии, установленные пакетами в пользовательском каталоге сайта, не будут исполняемыми, если только вы export PATH=$PATH:~/Library/Python/X.Y/bin/.
Андре Карон
21

Я бы использовал virtualenv в вашем домашнем каталоге.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Затем вы также можете изменить ~/.(login|profile|bash_profile), в зависимости от того, подходит ли ваша оболочка для добавления ~ / bin в вашу PATH, и тогда это pip|python|easy_installбудет тот, который используется по умолчанию.

Росс Паттерсон
источник
9
«Де - факто» способ сделать это virtualenv venv, source venv/bin/activate. Вы не обязательно хотите всегда использовать virtualenv, и с помощью этого метода, ваша подсказка с префиксом , (venv)когда вы используете его.
nyuszika7h
2
@ nyuszika7h Мы знаем, как использовать virtualenv. Но это действительно отвечает на вопрос и является очень аккуратным решением.
его
8
@itsafire Кто такие "мы"? Я рекомендую вам прочитать en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
Во всяком случае, я не согласен, это не "аккуратное решение". Это бессмысленный взлом.
nyuszika7h
19

Вы можете указать -tопцию ( --target), чтобы указать каталог назначения. Смотрите pip install --helpдля подробной информации. Это команда, которая вам нужна:

pip install -t path_to_your_home package-name

например, для установки скажем mxnet, в моем $HOMEкаталоге я набираю :

pip install -t /home/foivos/ mxnet
Foivos
источник
Получаю ошибку distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Что это означает?
Энтони Конг
Посетите сайт github.com/pypa/pip/issues/3826, чтобы обсудить соответствующие вопросы. Я ничего не знаю об этом, но я никогда не сталкивался с проблемой в моей среде.
Foivos