Какова цель "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?
Ответы
Ответ 1
pip по умолчанию устанавливает пакеты Python в системный каталог (например, /usr/local/lib/python3.4
). Для этого требуется доступ root.
--user
вместо этого устанавливает пакеты для установки пакетов в ваш домашний каталог, который не требует особых привилегий.
Ответ 2
--user
устанавливается в site.USER_SITE
.
Для моего случая это был /Users/.../Library/Python/2.7/bin
. Поэтому я добавил это в свой PATH (в файле ~/.bash_profile
):
export PATH=$PATH:/Users/.../Library/Python/2.7/bin
Ответ 3
В других ответах упоминается site.USER_SITE
где размещаются пакеты Python. Если вы ищете двоичные файлы, они идут в {site.USER_BASE}/bin
.
Если вы хотите добавить этот каталог в путь поиска оболочки, используйте:
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
Ответ 4
В macOS причина использования флага --user
заключается в том, чтобы мы не повредили библиотеки, на которые опирается ОС. Консервативный подход для многих пользователей macOS - избегать установки или обновления 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, не использующих сервер?
* Примечание. Функция защиты целостности системы Mac (SIP) также защищает пользователя от изменения системных библиотек.
- E
Ответ 5
Лучший способ - установить virtualenv
и не требовать путаницы --user
. Вы получите больше гибкости и не будете беспокоиться о путанице в разных версиях и проектах Python при каждой установке пакета.
https://virtualenv.pypa.io/en/stable/
Ответ 6
Просто предупреждение:
По этому вопросу, --user
в настоящее время не действует в виртуальном окр pip
, так как местоположение пользователя не имеет смысла для виртуальной среды.
Так что не используйте pip install --user some_pkg
внутри виртуальной среды, иначе pip
виртуальной среды будет перепутан. Смотрите этот ответ для более подробной информации.