Какова цель "pip install --user ..."?
От pip install --help
:
--user Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
Windows. (See the Python documentation for site.USER_BASE for full details.)
Документация для site.USER_BASE - это ужасная червоточина с интересной темой *NIX, которую я не понимаю.
Какова цель --user
на простом английском? Зачем вводить пакет в ~/.local/
иметь значение? Почему бы просто не разместить исполняемый файл где-нибудь в моем $PATH?
9 ответов
pip по умолчанию устанавливает пакеты Python в системный каталог (например, /usr/local/lib/python3.4
). Это требует root-доступа.
--user
вместо этого создает пакеты pip install в вашем домашнем каталоге, что не требует специальных привилегий.
Просто предупреждение:
Согласно этому вопросу,--user
в настоящее время не действует внутри виртуального окружения pip
, поскольку местоположение пользователя не имеет смысла для виртуальной среды.
Так что не используйте pip install --user some_pkg
внутри виртуальной среды, в противном случае виртуальная средаpip
будет смущен. См. Этот ответ для получения более подробной информации.
--user--
устанавливается в site.USER_SITE
, Больше документации здесь
Для моего случая это было /Users/.../Library/Python/2.7/bin
, Таким образом, я добавил это к моей PATH (в ~/.bash_profile
файл):
export PATH=$PATH:/Users/.../Library/Python/2.7/bin
Без виртуальных сред
pip <command> --user
изменяет область действия текущей команды pip для работы с локальным местоположением установки пакета python для текущей учетной записи пользователя, а не с общесистемным местоположением установки пакета, которое используется по умолчанию.
- См. Установки пользователя в Руководстве пользователя PIP.
Это действительно важно только на многопользовательской машине. Все, что установлено в системном расположении, будет видно всем пользователям, поэтому при установке в расположение пользователя этот пакет будет устанавливаться отдельно от других пользователей (они его не увидят и должны будут установить его самостоятельно, чтобы использовать его). Поскольку могут быть конфликты версий, установка пакета с зависимостями, необходимыми для других пакетов, может вызвать проблемы, поэтому лучше не отправлять все пакеты, используемые данным пользователем, в место установки системы.
- Если это однопользовательский компьютер, разницы между установкой на
--user
место расположения. Он будет установлен в другую папку, которую может или не нужно добавлять в путь, в зависимости от пакета и того, как он используется (многие пакеты устанавливают инструменты командной строки, которые должны быть на пути для запуска из оболочки). - Если это многопользовательская машина,
--user
предпочтительнее использовать root/sudo или требовать установки администратора и влиять на среду Python каждого пользователя, за исключением случаев общих пакетов, которые администратор хочет сделать доступными для всех пользователей по умолчанию.- Примечание. В комментариях к большинству установок Unix/Linux указывалось, что при установке системы следует использовать общий менеджер пакетов, например
apt
, скорее, чемpip
.
- Примечание. В комментариях к большинству установок Unix/Linux указывалось, что при установке системы следует использовать общий менеджер пакетов, например
В виртуальных средах
- Дополнительные сведения об установке пакетов с виртуальными средами см. В документации Python Packaging.
- Прочтите о том, как создавать и использовать виртуальные среды, и
venv
Команда в документации Python VENV.
В --user
опция в активной среде venv/virtualenv будет установлена в местоположение локального пользователя python (так же, как без виртуальной среды).
По умолчанию пакеты устанавливаются в виртуальную среду, но если вы используете --user
он заставит его установить за пределами виртуальных сред, в каталог скриптов Python пользователя (в Windows это в настоящее время c:\users\<username>\appdata\roaming\python\python37\scripts
для меня с Python 3.7).
Однако вы не сможете получить доступ к системе или установке пользователя из виртуальной среды (даже если вы использовали --user
находясь в виртуальной среде).
Если вы устанавливаете виртуальную среду с --system-site-packages
аргумент, у вас будет доступ к папке системных скриптов для python. Я считаю, что это также включает папку сценария Python пользователя, но я не уверен. Однако это может иметь непредвиденные последствия, и это не предполагаемый способ использования виртуальных сред.
Расположение папок установки системы Python и локального пользователя
Вы можете найти расположение папки установки пользователя для python с помощью python -m site --user-base
. Я нахожу противоречивую информацию в вопросах и ответах, документации и фактически использую эту команду на своем ПК относительно настроек по умолчанию, но они находятся в домашнем каталоге пользователя (~
ярлык в * nix и c:\users\<username>
обычно для Windows).
Другие детали
В --user
опция не действительна для каждой команды. Напримерpip uninstall
найдет и удалит пакеты везде, где они были установлены (в папке пользователя, папке виртуальной среды и т. д.), а --user
вариант не действителен.
Вещи установлены с pip install --user
будет установлен в локальном месте, которое будет видеть только текущая учетная запись пользователя, и для него не потребуется root-доступ (в *nix) или доступ администратора (в Windows).
В --user
опция изменяет все pip
команды, которые принимают его, чтобы видеть / работать с установочной папкой пользователя, поэтому, если вы используете pip list --user
он покажет вам только пакеты, установленные сpip install --user
.
Другие ответы упоминают site.USER_SITE
как, где пакеты Python помещаются. Если вы ищете двоичные файлы, они идут в {site.USER_BASE}/bin
,
Если вы хотите добавить этот каталог в путь поиска вашей оболочки, используйте:
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
Лучший способ это установить virtualenv
и не требуют --user
спутанность сознания. Вы получите больше гибкости и не будете беспокоиться о путанице в разных версиях и проектах Python при каждой установке пакета.
В MAC OS причина использования --user
Флаг должен гарантировать, что мы не повредим библиотеки, на которые опирается ОС. Консервативный подход для многих пользователей MAC OS - избегать установки или обновления pip с помощью команды, которая требует sudo
, Таким образом, это включает в себя установку в /usr/local/bin
...
Ссылка: установка python для Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim)
Мне не все понятно, зачем устанавливать в /usr/local/bin
риск для MAC, учитывая тот факт, что система полагается только на двоичные файлы Python в /Library/Frameworks/
а также /usr/bin
, Я подозреваю, что это потому, что, как отмечено выше, установка в /usr/local/bin
требует sudo
что открывает возможность совершить дорогостоящую ошибку с системными библиотеками. Таким образом, установка в ~/.local/bin
это верный способ избежать этого риска.
Ссылка: использование python на Mac ( https://docs.python.org/2/using/mac.html)
Наконец, в той степени, в которой есть преимущества установки пакетов в /usr/local/bin
Интересно, имеет ли смысл сменить владельца каталога с root
в user
? Это позволит избежать необходимости использовать sudo
все еще защищая от внесения системных зависимых изменений. * Является ли этот параметр безопасности по умолчанию пережитком того, как системы Unix чаще использовались в прошлом (в качестве серверов)? Или, по крайней мере, просто хороший способ для пользователей MAC, не размещающих сервер?
* Примечание. Функция защиты целостности системы (SIP) в Mac также защищает пользователя от изменения системных библиотек.
- E
Почему бы просто не поместить исполняемый файл где-нибудь в моем $PATH
~/.local/bin directory
теоретически ожидается, что он будет в вашем$PATH
.
По словам этих людей , это ошибка, если не добавить ее в$PATH
когда используешь systemd
.
Этот ответ объясняет это более подробно.
Но даже если ваш дистрибутив включает~/.local/bin
каталог в$PATH
, он может быть в следующем виде (внутри ~/.profile
):
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
что потребует от вас выхода и повторного входа в систему, если каталог не был там раньше.
Если вы используете собственную среду conda, не используйте файлы . И если вы используете общедоступную среду conda, используйте--user
установить пакеты у вас дома~/.local/lib/
.