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.)

现场文档。USER_BASE是一个有趣的*NIX主题的可怕虫洞,我不理解。

简单地说,用户的目的是什么?为什么要安装到~/。本地/重要吗?为什么不把一个可执行文件放在我的$PATH中?


当前回答

在macOS上,使用——user标志的原因是确保我们不会破坏操作系统所依赖的库。对于许多macOS用户来说,一种保守的方法是避免使用需要sudo的命令安装或更新pip。因此,这包括安装到/usr/local/bin…

参考:安装python for Neovim (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的好处而言,我想知道将目录的所有者从根改为用户是否有意义?这将避免不得不使用sudo,同时仍然防止进行依赖于系统的更改。*这是Unix系统过去(作为服务器)常用的安全默认值吗?或者至少,对于Mac用户来说,这是一个没有服务器的好方法?

*注意:Mac的系统完整性保护(SIP)功能似乎也保护用户不更改系统相关的库。

- E

其他回答

为什么要安装包到~/。本地/重要吗? 为什么不把一个可执行文件放在我的$PATH中?

~ /。local/bin目录理论上应该在$PATH中。

根据这些人的说法,在使用systemd时,没有在$PATH中添加它是一个错误。

这个答案更广泛地解释了它。

但是即使你的发行版包含了~/。到$PATH,它可能是以下形式(在~/.profile中):

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

这将要求您在第一次创建目录时注销并再次登录。

没有虚拟环境

PIP <command>——user修改当前PIP命令的作用域,使其作用于当前用户帐户的本地python包安装位置,而不是默认的系统级包安装位置。

参见《PIP用户指南》中的“用户安装”。

This only really matters on a multi-user machine. Anything installed to the system location will be visible to all users, so installing to the user location will keep that package installation separate from other users (they will not see it, and would have to install it themselves separately to use it). Because there can be version conflicts, installing a package with dependencies needed by other packages can cause problems, so it's best not to push all packages a given user uses to the system install location.

If it is a single-user machine, there is little or no difference to installing to the --user location. It will be installed to a different folder, that may or may not need to be added to the path, depending on the package and how it's used (many packages install command-line tools that must be on the path to run from a shell). If it is a multi-user machine, --user is preferred to using root/sudo or requiring administrator installation and affecting the Python environment of every user, except in cases of general packages that the administrator wants to make available to all users by default. Note: Per comments, on most Unix/Linux installs it has been pointed out that system installs should use the general package manager, such as apt, rather than pip.


使用虚拟环境

有关在虚拟环境中安装包的更多信息,请参阅Python package文档。 在Python venv文档中阅读如何创建和使用虚拟环境,以及venv命令。

活动venv/virtualenv环境中的——user选项将安装到本地用户python位置(与没有虚拟环境相同)。

默认情况下,包被安装到虚拟环境中,但如果你使用——user,它将强制它安装在虚拟环境之外的users python脚本目录中(在Windows中,这目前是c:\users\<username>\appdata\roaming\python\python37\scripts对于我来说,使用python 3.7)。

但是,您将无法从虚拟环境中访问系统或用户安装(即使您在虚拟环境中使用——user)。

如果使用——system-site-packages参数安装虚拟环境,则可以访问python的系统脚本文件夹。我相信这也包括用户python脚本文件夹,但我不确定。但是,这样做可能会产生意想不到的后果,并且这不是使用虚拟环境的理想方式。


Python系统和本地用户安装文件夹的位置

你可以用python -m site——user-base找到python用户安装文件夹的位置。我在问答,文档和实际上在我的PC上使用这个命令的默认值中发现了冲突的信息,但它们在用户主目录下(*nix中的快捷方式,c:\users\<用户名>通常用于Windows)。


其他细节

——user选项并非对每个命令都有效。例如,pip uninstall会找到并卸载安装的包(在用户文件夹、虚拟环境文件夹等),而——user选项无效。

使用pip install——user安装的东西将安装在本地位置,只有当前用户帐户才能看到,并且不需要root访问权限(在*nix上)或管理员访问权限(在Windows上)。

——user选项修改所有接受它的pip命令以查看/操作用户安装文件夹,因此如果您使用pip list——user,它将只显示使用pip install——user安装的包。

只是一个警告:

根据这个问题,——user目前在虚拟环境的pip中是无效的,因为用户位置对于虚拟环境没有实际意义。

所以不要在虚拟环境中使用pip install——user some_pkg,否则会混淆虚拟环境的pip。更多细节请看这个答案。

其他答案提到了网站。USER_SITE作为存放Python包的位置。如果您正在寻找二进制文件,则将它们放在{site.USER_BASE}/bin中。

如果你想把这个目录添加到你的shell的搜索路径,使用:

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

——用户安装在site.USER_SITE。

对于我的例子,它是/Users/…/Library/Python/2.7/bin。所以我把它添加到我的PATH (in ~/。bash_profile文件):

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