От 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?
python
python-3.x
pip
virtualenv
Роб Труксал
источник
источник
import site; print site.USER_SITE
распечатать место установки. Для меня я получил/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
это каталог по умолчанию для пакетов, установленных с помощью pip . Но если один пользователь хочет установить пользовательские пакеты, они могут использовать$ sudo pip3 --user install some_package
. Этот пакет останется недоступным для групп и других лиц, имеющих доступ к этому хосту.Ответы:
По умолчанию pip устанавливает пакеты Python в системный каталог (например,
/usr/local/lib/python3.4
). Это требует root-доступа.--user
вместо этого создает пакеты pip install в вашем домашнем каталоге, что не требует никаких особых привилегий.источник
--user
ли быть уверенным, что пакет не запускается от имени пользователя root? (Я представляю что-то похожее на опции Wireshark / kismet / burpsuite для настройки политик группового доступа, тем самым не позволяя всем функциям программы работать от имени пользователя root. Это на правильном пути?) Или эта--user
опция просто подразумевается чтобы позволить установку без привилегий суперпользователя? Если это так, почему я никогда не используюsudo pip install foo_package
? Я никогда не нуждался в root-привилегиях для установки через pip.--user
о изоляции пользователя! Это похоже на смешной смысл. Спасибо @NDEthos!pip freeze --user
?--user
устанавливается вsite.USER_SITE
.Для моего случая это было
/Users/.../Library/Python/2.7/bin
. Итак, я добавил это в мой путь (в~/.bash_profile
файле):источник
В других ответах упоминается,
site.USER_SITE
где находятся пакеты Python. Если вы ищете двоичные файлы, они идут в{site.USER_BASE}/bin
.Если вы хотите добавить этот каталог в путь поиска вашей оболочки, используйте:
источник
Просто предупреждение:
Согласно этой проблеме ,
--user
в настоящее время недействительно внутри виртуальной средыpip
в виртуальной среде, поскольку местоположение пользователя не имеет смысла для виртуальной среды.Так что не используйте
pip install --user some_pkg
внутри виртуальной среды , иначе виртуальная средаpip
будет перепутана. Смотрите этот ответ для более подробной информации.источник
Лучший способ это установить
virtualenv
и не требовать--user
путаницы. Вы получите больше гибкости и не будете беспокоиться о путанице в различных версиях и проектах Python при каждой установке пакета.https://virtualenv.pypa.io/en/stable/
источник
В macOS причина использования
--user
флага заключается в том, чтобы мы не повредили библиотеки, на которые опирается ОС. Консервативный подход для пользователей многого MacOS, чтобы избежать установок или обновлений пипа с командой , которая требуетsudo
. Таким образом, это включает в себя установку в/usr/local/bin
...Ссылка: установка python для Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
Я не совсем понимаю, почему установка в
/usr/local/bin
Mac является риском для Mac, учитывая тот факт, что система использует только двоичные файлы Python в/Library/Frameworks/
и/usr/bin
. Я подозреваю, что это потому, что, как отмечалось выше, установка в/usr/local/bin
require требуетsudo
открытия дорогостоящей ошибки с системными библиотеками. Таким образом, установка в~/.local/bin
это верный способ избежать этого риска.Ссылка: использование python на Mac ( https://docs.python.org/2/using/mac.html )
Наконец, в той степени, в которой есть преимущество установки пакетов в
/usr/local/bin
, мне интересно, имеет ли смысл сменить владельца каталога сroot
наuser
? Это позволило бы избежать необходимости использоватьsudo
при этом защиту от внесения системных изменений. * Является ли это по умолчанию безопасностью следом того, как системы Unix чаще использовались в прошлом (в качестве серверов)? Или, по крайней мере, просто хороший способ для пользователей Mac, не размещающих сервер?* Примечание. Функция защиты целостности системы (SIP) в Mac также защищает пользователя от изменения системных библиотек.
- E
источник
Без виртуальных сред
pip <command> --user
изменяет область действия текущей команды pip для работы с локальным местоположением установки пакета Python текущей учетной записи пользователя, а не с общесистемным местоположением установки пакета, которое используется по умолчанию.Это действительно имеет значение только на многопользовательской машине. Все, что установлено в системном расположении, будет видно всем пользователям, поэтому установка в пользовательское местоположение будет держать установку этого пакета отдельно от других пользователей (они не будут видеть его, и для его использования придется установить его отдельно). Поскольку могут быть конфликты версий, установка пакета с зависимостями, необходимыми для других пакетов, может вызвать проблемы, поэтому лучше не помещать все пакеты, которые использует данный пользователь, в место установки системы.
--user
месте. Он будет установлен в другую папку, которую может или не нужно добавлять в путь, в зависимости от пакета и способа его использования (многие пакеты устанавливают средства командной строки, которые должны находиться на пути для запуска из оболочки) ,--user
предпочтительнее использовать root / sudo или требовать установки администратора и влиять на среду Python каждого пользователя, кроме случаев общих пакетов, которые администратор хочет сделать доступными для всех пользователей по умолчанию.apt
, вместоpip
.С виртуальной средой
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
.источник
pip install
без--user
полностью. Это установит пакеты Python в местах, которые действительно следует оставить системному менеджеру пакетов (например,apt
в Debian / Ubuntu). С этим лучше не связываться, это приводит ко многим проблемам. Если пакет Python должен быть доступен для всех пользователей, используйте менеджер пакетов операционной системы, но не делайте этогоsudo pip install ...
. Альтернатива естьsudo pip install --target ...
. В Windows это меньше проблем.~/.local/bin directory
теоретически ожидается быть в вашем$PATH
.По словам этих людей , это ошибка, не добавляющая их
$PATH
при использованииsystemd
.Этот ответ объясняет это более подробно.
Но даже если ваш дистрибутив включает в себя
~/.local/bin
каталог для$PATH
, он может быть в следующей форме (внутри~/.profile
):что потребует от вас выхода из системы и входа снова , если каталог не был там раньше.
источник