Встановлення пакетів піп у папку $ HOME


330

Це можливо? Під час встановлення pipвстановіть пакети python всередині моєї $HOMEпапки. (наприклад, я хочу встановити mercurial, використовуючи pip, але всередині $HOMEзамість /usr/local)

Я з комп'ютером Mac і просто думав над цією можливістю, замість того, щоб "забруднити" моє /usr/local, я використав би свій $HOME.

PEP370 саме про це. Це просто створення ˜/.localта зробити pip install packageдостатньо для того, щоб ці пакунки встановлювалися лише в моїй папці $ HOME?


Ви перевірили 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. І це спрацювало. Пакет зараз встановлений у домашньому підкаталозі та працює як слід. Доведеться поговорити з моїм адміністратором сервера.
Ян Вльчинський

1
Якщо вам потрібно встановити PIP, просто зробіть щось на кшталт wget https://bootstrap.pypa.io/get-pip.pyцього, python get-pip.pyі ви готові йти. Можливо, це стане в нагоді, якщо ви знаходитесь на машині, де встановлений PIP занадто старий (це було у мене). Див. Pip.readthedocs.org/en/latest/installing.html для отримання додаткової інформації.
Маркус

Відповіді:


463

Хоча ви можете використовувати a 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
Будьте уважні, що якщо ви зробите це, а потім спробуєте використовувати конден-файли, то встановлені в .localньому файли завжди будуть першими, що може призвести до дуже важких помилок при імпорті.
tacaswell

12
Зауважте, що в OSX папка бін каталогів сайту користувача не знаходиться на PATH. Це означає, що сценарії, встановлені пакетами в каталозі сайту користувачів, не виконуватимуться, якщо ви export PATH=$PATH:~/Library/Python/X.Y/bin/.
Андре Карон

21

Я б використовував virtualenv у вашому домі каталозі HOME.

$ 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. Але це дійсно відповідає на питання і є дуже акуратним рішенням.
itsafire

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

Наприклад, для установки say mxnet у своєму $HOMEкаталозі я ввожу :

pip install -t /home/foivos/ mxnet

Помилка distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Що це означає?
Ентоні Конг

Перевірте пов’язану дискусію на github.com/pypa/pip/isissue/3826 . Я нічого не знаю з цього приводу, але в своїх умовах я ніколи не стикався з проблемою.
Фойвос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.