Какова цель "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.

В виртуальных средах

В --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 при каждой установке пакета.

https://virtualenv.pypa.io/en/stable/

В 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/.

Другие вопросы по тегам