Я знаю, что очевидный ответ - использовать virtualenv и virtualenvwrapper, но по разным причинам я не могу / не хочу этого делать.
Так как мне изменить команду
pip install package_name
сделать pip
установку пакета где-нибудь, кроме по умолчанию site-packages
?
pip
не пытаться удалить старую версию из нестандартного каталога. Например - общесистемный, где у вас нет прав на запись. До сих пор я справлялся только сeasy_install
...--ignore-installed
опции должно предотвратить попытки pip удалить уже установленные пакеты.mkvirtualenv --python=/usr/bin/python3.5 env_name
Ответы:
Использование:
Вы также можете использовать
--ignore-installed
для принудительной переустановки всех зависимостей, используя этот новый префикс. Вы можете использовать--install-option
несколько раз, чтобы добавить любую из опций, с которыми вы можете работатьpython setup.py install
(--prefix
возможно, это то, что вы хотите, но есть куча других опций, которые вы можете использовать).источник
pip freeze
альтернативный каталог?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
то стоит их увидеть.--prefix=$PREFIX_PATH
, похоже, не дает полного контроля над установочным каталогом, так как к нему добавляется суффикс, специфичный для системы (\Lib\site-packages
например, в Windows). Есть ли способ указать конкретный каталог?--Target выключатель является , что вы ищете:
Но вам все еще нужно добавить,
d:\somewhere\other\than\the\default
чтобыPYTHONPATH
использовать их из этого места.Обновите пункт, если целевой переключатель недоступен:
В Linux или OS X:
В Windows (это решает проблему ):
источник
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
упомянутым @Ian Bicking и--target=$PATH
опцией?target
это пункт, и все, что вы вставите,install-option
будет переданоsetup.py install command
. В основном этоtarget
расположение пользовательских сайтов-пакетов.--target
может привести к частичной установке, так как он не будет устанавливать никакие файлы сценариев / данных, включая указанный префикс. Кажется, что передача--prefix
с--install-option
- это единственный правильный способ получить полный контроль над префиксом используемых установок.Вместо
--target
опции или--install-options
опции я обнаружил, что следующее работает хорошо (из обсуждения ошибки относительно этой самой вещи на https://github.com/pypa/pip/issues/446 ):(Или установите
PYTHONUSERBASE
каталог в вашей среде перед запуском команды, используяexport PYTHONUSERBASE=/path/to/install/to
)При этом используется очень полезный
--user
вариант , но говорит это сделатьbin
,lib
,share
и другие каталоги , которые вы ожидали бы под настраиваемой приставкой , а не$HOME/.local
.Затем вы можете добавить это в ваших
PATH
,PYTHONPATH
и других переменных , как вы нормальный каталог установки.Обратите внимание, что вам также может потребоваться указать параметры
--upgrade
и--ignore-installed
, если для любых пакетов, от которых это зависит, требуется установить более новые версии вPYTHONUSERBASE
каталоге, чтобы переопределить предоставленные системой версии.Полный пример:
... чтобы установить
scipy
иnumpy
упаковать самые последние версии в каталог, который вы затем можете включить в свой каталогPYTHONPATH
(например, для bash и для python 2.6 в CentOS 6 для этого примера):Использование virtualenv - все еще лучшее и более аккуратное решение!
источник
/bin
папка, которую--user
создает pip, создает ее, как делает,--PREFIX
тогда как--target
нет.--ignore-installed
необходимо.--editable
локальной установкой.su
обхода (например, это может быть проблематично в контейнерах).Установка пакета Python часто включает только некоторые чистые файлы Python. Если пакет содержит данные, сценарии и / или исполняемые файлы, они устанавливаются в разные каталоги из чистых файлов Python.
Предполагая, что в вашем пакете нет данных / скриптов / исполняемых файлов, и что вы хотите, чтобы ваши файлы Python помещались
/python/packages/package_name
(а не в какой-то подкаталог на несколько уровней ниже,/python/packages
как при использовании--prefix
), вы можете использовать команду time:Если вы хотите, чтобы все (или большинство) ваших пакетов были там, вы можете отредактировать свой,
~/.pip/pip.conf
включив в него:Таким образом, вы не можете забыть о необходимости указывать это снова и снова.
Любые исключаемые файлы / данные / сценарии, включенные в пакет, будут по-прежнему отправляться в места по умолчанию, если вы не укажете дополнительные параметры установки (
--prefix
/--install-data
/--install-scripts
и т. Д., Для получения подробной информации смотрите пользовательские параметры установки ).источник
--prefix
там, потому что у меня есть «локальный» каталог на общем сервере в домашнем каталоге, и он использовался в качестве префиксаeasy_install
до того, как я перешел наpip
. Система$PATH
и$PYTHONPATH
были настроены ранее. Вместо этогоinstall-option=--install-purelib=/blah
есть более новаяtarget=/blah
опция / переключатель. Это также хорошо, но иногда вам нужна просто замена--prefix
, которую вы бы использовали сsetup.py
илиeasy_install
.Чтобы установить библиотеку точно там, где я хотел, я перешел в то место, где я хотел, каталог с терминалом, а затем использовал
логика, которую я взял с этой страницы: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
источник
-t
является сокращением для--target
Никто, кажется, не упомянул опцию -t, но это самое простое:
источник
-t
Вариантом является короткой версией--target
опции , которая была описана в другом ответ ( stackoverflow.com/a/19404371/594053 ) :)Просто добавьте одно очко к ответу @Ian Bicking:
С использованием
--user
опции для указания установленного каталога также работает, если вы хотите установить некоторый пакет Python в свой домашний каталог (без права пользователя sudo) на удаленном сервере.Например,
Команда установит пакет в один из каталогов, перечисленных в вашей PYTHONPATH.
источник
Протестировал эти опции с 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.
источник
Более новые версии
pip
(8 или более поздние) могут напрямую использовать--prefix
параметр :где
$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:затем (
-I
используется для принудительной установки, несмотря на предыдущие сбои / .local install):Затем я добавил
/usr/local/lib/python2.7/bin
в$PATH
.Я думал, что включу это в случае, если у кого-то еще есть подобные проблемы на машине, к которой у них нет доступа sudo.
источник
Если вы используете brew с python, к сожалению, pip / pip3 поставляется с очень ограниченными возможностями. У вас нет опций --install-option, --target, --user, как указано выше.
Вы можете найти эту строку очень громоздкой. Я предлагаю использовать pyenv для управления. Если вы используете
brew upgrade python python3
Как ни странно , вы фактически понижаем функциональность пипсов.
(Я публикую этот ответ просто потому, что pip в моем Mac OSX не имеет опции --target, и я потратил часы на ее исправление)
источник
ignore-installed
благодаря предыдущим усилиям работал на меня:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
С pip
v1.5.6
на Pythonv2.7.3
(GNU / Linux) опция--root
позволяет указать глобальный префикс установки (по-видимому) независимо от параметров конкретного пакета. Попробуй фи,источник
Я предлагаю следовать документации и создать файл ~ / .pip / pip.conf. Обратите внимание, что в документации отсутствует указанная директория заголовка, что приводит к следующей ошибке:
Полный рабочий контент файла conf:
К сожалению, я могу установить, но при попытке удалить pip сообщает, что такого пакета для процесса удаления не существует .... поэтому что-то все равно не так, но пакет идет в предопределенное место.
источник
pip install /path/to/package/
теперь возможно.
Разница с этим и использование флага
-e
or--editable
заключается в том-e
, что вместо того, чтобы устанавливать его в путь к python, вы указываете, куда был сохранен пакет (т. Е. Ваша папка загрузок).Это означает, что если вы удалите / переместите пакет в другую папку, вы не сможете его использовать.
источник
Я нашел простой способ
источник - https://pip.pypa.io/en/stable/reference/pip_install/
Я попробовал это с pip3, и это работает!
источник