从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
的文档是一个可怕的虫洞,有一些有趣的Unix主题,我不明白。--user
的目的是什么?为什么将软件包安装到~/.local/
很重要?为什么不把一个可执行文件放在我的$PATH
中呢?
9条答案
按热度按时间6g8kf2rb1#
pip默认将Python包安装到系统目录(如
/usr/local/lib/python3.4
)。这需要root访问权限。--user
使pip安装包在您的主目录中,这不需要任何特权。eoxn13cs2#
只是一个警告:
根据这个问题,
--user
目前在虚拟环境的pip
中是无效的,因为用户位置对于虚拟环境没有意义。所以不要在虚拟环境中使用
pip install --user some_pkg
**,否则虚拟环境的pip
会被混淆。请参阅this answer了解更多详细信息。noj0wjuj3#
--user
安装在site.USER_SITE
中。在我的例子中,它是
/Users/.../Library/Python/2.7/bin
。所以我把它添加到我的PATH(在~/.bash_profile
文件中):lsmepo6l4#
无虚拟环境
pip <command> --user
将当前pip命令的作用域更改为当前用户帐户的本地python包安装位置,而不是系统范围的包安装位置,这是默认值。这只在多用户机器上才真正重要。安装到系统位置的任何内容对所有用户都是可见的,因此安装到用户位置将使该软件包安装与其他用户分开(他们不会看到它,并且必须单独安装才能使用它)。由于可能存在版本冲突,安装具有其他软件包所需依赖项的软件包可能会导致问题,因此最好不要将给定用户使用的所有软件包推送到系统安装位置。
--user
位置几乎没有区别。它将被安装到一个不同的文件夹中,可能需要也可能不需要添加到路径中,这取决于软件包和它的使用方式(许多软件包安装的命令行工具必须在路径上才能从shell运行)。--user
比使用root/sudo或需要管理员安装并影响每个用户的Python环境更好,除非管理员希望默认情况下所有用户都可以使用一般包。****注意:****根据评论,在大多数Unix/Linux安装中,已经指出系统安装应该使用通用包管理器,如
apt
,而不是pip
。使用虚拟环境
venv
命令in the Python VENV docs。活动venv/virtualenv环境中的
--user
选项将安装到本地用户python位置(与没有虚拟环境时相同)。默认情况下,包会安装到虚拟环境中,但如果您使用
--user
,它将强制它安装在虚拟环境之外,在用户的python脚本目录中(在Windows中,对于我来说,使用Python 3.7时,这是c:\users\<username>\appdata\roaming\python\python37\scripts
)。但是,您将无法从虚拟环境中访问系统或用户安装(即使您在虚拟环境中使用
--user
)。如果你安装了一个带有
--system-site-packages
参数的虚拟环境,你将可以访问python的系统脚本文件夹。我相信这也包括用户python脚本文件夹,但我不确定。然而,这可能会产生意想不到的后果,并且这不是使用虚拟环境的预期方式。Python系统和本地用户安装文件夹的位置
您可以使用
python -m site --user-base
找到python的用户安装文件夹的位置。我在Q&A的文档中发现了相互矛盾的信息,实际上在我的PC上使用这个命令来确定默认值是什么,但它们位于用户主目录下(*nix中的~
快捷方式,以及通常用于Windows的c:\users\<username>
)。其他详情
--user
选项并非对每个命令都有效。例如,pip uninstall
将找到并卸载安装在任何位置的软件包(在用户文件夹、虚拟环境文件夹等),并且--user
选项无效。使用
pip install --user
安装的东西将安装在仅由当前用户帐户看到的本地位置,并且不需要root访问权限(在 *nix上)或管理员访问权限(在Windows上)。--user
选项修改所有pip
命令,接受它查看/操作用户安装文件夹,因此如果您使用pip list --user
,它将只显示您安装的pip install --user
软件包。vtwuwzda5#
其他答案提到
site.USER_SITE
是放置Python包的地方。如果您正在寻找二进制文件,这些文件放在{site.USER_BASE}/bin
中。如果要将此目录添加到shell的搜索路径中,请用途:
yqhsw0fo6#
最好的方法是安装virtualenv,而不需要混淆
--user
。您将获得更大的灵活性,并且不必担心每次安装软件包时都会遇到不同的Python版本和项目。4sup72z87#
在macOS上,使用
--user
标志的原因是为了确保我们不会损坏操作系统所依赖的库。对于许多macOS用户来说,一个保守的方法是避免使用需要sudo
的命令安装或更新pip。因此,这包括安装到/usr/local/bin
...参考:为Neovim安装python(https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim)
我不清楚为什么在Mac上安装
/usr/local/bin
是一个风险,因为系统只依赖于/Library/Frameworks/
和/usr/bin
中的python二进制文件。我怀疑这是因为如上所述,安装到/usr/local/bin
需要sudo
,这为在系统库上犯代价高昂的错误打开了大门。因此,安装到~/.local/bin
中是避免这种风险的可靠方法。参考:在Mac上使用Python(https://docs.python.org/2/using/mac.html)
最后,就将软件包安装到
/usr/local/bin
的好处而言,我想知道将目录的所有者从root
更改为user
是否有意义?* 这将避免必须使用sudo
,同时仍然防止进行依赖于系统的更改。**这是一个安全默认值吗?是过去Unix系统更经常使用的遗迹(作为服务器)吗?或者至少,对于没有托管服务器的Mac用户来说,这是一个很好的方法?g6ll5ycj8#
为什么将包安装到~/.local/会很重要?为什么不把一个可执行文件放在我的$PATH中呢?
~/.local/bin directory
理论上应该在$PATH
中。根据these people,这是一个bug在使用
systemd
时没有将其添加到$PATH
中。This answer更详细地解释了它。
但是即使您的发行版包含
~/.local/bin
目录到$PATH
,它也可能是以下形式(在~/.profile
内):这将要求您在第一次创建目录时注销并再次登录。
idfiyjo89#
如果您使用的是自己的Conda环境,请不要使用
--user
。如果您使用的是公共Conda环境,请使用--user
在您的家中安装软件包~/.local/lib/
。