关于python:“ pip install –user…”的目的是什么?

What is the purpose “pip install --user …”?

pip install --help

1
2
 --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中?


pip默认将Python软件包安装到系统目录(例如/usr/local/lib/python3.4)。这需要root访问。

--user改为在您的主目录中进行pip安装软件包,该软件包不需要任何特殊特权。


--user安装在site.USER_SITE中。

就我而言,它是/Users/.../Library/Python/2.7/bin。因此,我将其添加到了PATH(在~/.bash_profile文件中):

1
export PATH=$PATH:/Users/.../Library/Python/2.7/bin


其他答案提到site.USER_SITE是放置Python软件包的位置。如果您要查找二进制文件,则这些文件位于{site.USER_BASE}/bin中。

如果要将此目录添加到外壳程序的搜索路径,请使用:

1
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"

在MAC OS上,使用--user标志的原因是确保我们不会损坏OS依赖的库。对于许多MAC OS用户而言,保守的方法是避免使用需要sudo的命令来安装或更新pip。因此,这包括安装到/usr/local/bin ...

参考:为Neovim安装python(https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim)

考虑到系统仅依赖于/Library/Frameworks//usr/bin中的python二进制文件,我还不清楚为什么在MAC上安装/usr/local/bin会有风险。我怀疑是因为如上所述,安装到/usr/local/bin中需要sudo,这为在系统库中造成重大损失打开了大门。因此,安装到~/.local/bin是避免这种风险的肯定方法。

参考:在Mac上使用python(https://docs.python.org/2/using/mac.html)

最后,从某种程度上来说,将软件包安装到/usr/local/bin中会有好处,我想知道将目录的所有者从root更改为user是否有意义?这样可以避免不得不使用sudo的同时仍然避免进行与系统有关的更改。*这是否是安全默认值,它可以作为过去更频繁地使用Unix系统(作为服务器)的原因吗?或者至少,对于不托管服务器的MAC用户而言,这是一个好方法吗?

*注意:Mac的系统完整性保护(SIP)功能似乎也可以保护用户免于更改依赖于系统的库。

-E


最好的方法是安装virtualenv,而不需要--user混淆。您将获得更大的灵活性,而不必担心每次pip安装软件包时都会破坏不同的python版本和项目。

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


只是警告:

根据此问题,--user当前在虚拟环境的pip内部无效,因为用户位置对于虚拟环境而言实际上没有任何意义。

因此,请勿在虚拟环境中使用pip install --user some_pkg,否则,虚拟环境的pip将被混淆。有关更多详细信息,请参见此答案。