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中?
-
您可以import site; print site.USER_SITE打印安装位置。 对我来说,我得到了${HOME}.locallibpython${PY_MAJOR}.${PY_MINOR}site-packages。
pip默认将Python软件包安装到系统目录(例如/usr/local/lib/python3.4)。这需要root访问。
--user改为在您的主目录中进行pip安装软件包,该软件包不需要任何特殊特权。
-
谢谢;那讲得通。但是--user的目的是确保不以root用户身份运行该软件包吗? (我想像类似于Wireshark / kismet / burpsuite选项的选项来设置组访问策略,从而不允许所有程序功能都以root身份运行。这是否在正确的轨道上?)还是--user选项仅仅是是要允许没有root特权的安装?如果是这样,我为什么不使用sudo pip install foo_package?我以前从未需要通过pip安装root特权。
-
@Rob Truxal。我认为关键是该软件包不会被其他用户看到。也许您想要一个较旧/较新版本的软件包,但如果将其安装在系统上,则将使工作伙伴陷入困境。
-
哦! --user参数与用户隔离有关!那使人感觉有些荒谬。谢谢@NDEthos!
-
好的,这是一个(愚蠢的)问题:假设我以foo用户身份登录,然后运行了以下命令pip install --user -r requirements.txt ..一切都安装正确。然后我以用户栏身份登录,并像这样运行python程序:sudo -u foo ./odoo-bin ..它会从为foo用户安装的python包中读取信息吗?或如何运作?
-
还有没有办法只列出为当前用户安装的软件包?即像pip freeze --user之类的东西?
-
你可以看到我在这个问题上说的内容
-
如果有一种方法可以配置--user是隐式的环境,那就太好了
--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将被混淆。有关更多详细信息,请参见此答案。