“pip install --user ...”的目的是什么?

问题描述 投票:89回答:5

来自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 bash pip
5个回答
127
投票

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

--user在您的主目录中创建pip安装包,而不需要任何特殊权限。


15
投票

--user安装在site.USER_SITE

对于我的情况,它是/Users/.../Library/Python/2.7/bin。所以我把它添加到我的PATH(在~/.bash_profile文件中):

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

7
投票

在MAC OS上,使用--user标志的原因是为了确保我们不会破坏操作系统所依赖的库。许多MAC OS用户的保守方法是避免使用需要sudo的命令安装或更新pip。因此,这包括安装到/usr/local/bin ...

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

我不清楚为什么安装到/usr/local/bin是MAC的风险,因为系统只依赖于/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用户来说,这是一个好方法吗?

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

- E.


6
投票

其他答案提到site.USER_SITE作为Python包的放置位置。如果您正在寻找二进制文件,请访问{site.USER_BASE}/bin

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

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

3
投票

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

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


1
投票

只是一个警告:

根据this issue--user目前在虚拟环境的pip中无效,因为用户位置对虚拟环境没有任何意义。

所以不要在虚拟环境中使用pip install --user some_pkg,否则,虚拟环境的pip将会混淆。有关详细信息,请参阅this answer

© www.soinside.com 2019 - 2024. All rights reserved.