"pip install --user ..."的目的是什么?

Rob*_*xal 132 python pip virtualenv python-3.x

来自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.)
Run Code Online (Sandbox Code Playgroud)

site.USER_BASE的文档是一个令人讨厌的虫洞,有趣的*NIX主题,我不明白.

--user简明英语的目的是什么?为什么要将包裹装入~/.local/物质?为什么不在我的$ PATH中放置一个可执行文件?

dus*_*uff 162

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

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

  • @Rob Truxal.我认为关键是其他用户不会看到该包.也许你想要一个旧的/更新版本的软件包,但如果你在系统上安装它,你就会搞砸你的工作伙伴. (10认同)
  • 谢谢; 这就说得通了。但是 `--user` 的目的是确保不以 root 身份运行该包吗?(我正在想象类似 Wireshark/kismet/burpsuite 选项来设置组访问策略,从而不允许所有程序功能以 root 身份运行。这是在正确的轨道上吗?)或者是`-- user` 选项只是意味着_允许_没有root权限的安装?如果是这样的话,为什么我不使用`sudo pip install foo_package`?我以前从未需要通过 pip 安装 root 权限。 (4认同)
  • 哦!`--user`参数是关于用户隔离的!这让人感觉像是一种荒谬的感觉.谢谢@NDEthos! (4认同)
  • 好的,它就像一个目标环境。如果使用和不使用 --user 来安装软件包会怎么样,那么将使用哪个版本? (3认同)

YaO*_*OzI 22

只是一个警告:

根据这个问题--user当前在虚拟环境中无效pip,因为用户位置对于虚拟环境没有真正意义。

所以不要pip install --user some_pkg 在虚拟环境中使用,否则虚拟环境pip会被混淆。有关更多详细信息,请参阅此答案


Roo*_*ahi 20

--user安装在site.USER_SITE.这里有更多文档

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

export PATH=$PATH:/Users/.../Library/Python/2.7/bin
Run Code Online (Sandbox Code Playgroud)


Lig*_*tCC 19

没有虚拟环境

pip <command> --user 将当前 pip 命令的范围更改为在当前用户帐户的本地 python 包安装位置上工作,而不是系统范围内的包安装位置,这是默认值。

这仅在多用户机器上才真正重要。安装到系统位置的任何内容对所有用户都是可见的,因此安装到用户位置将使该软件包安装与其他用户分开(他们不会看到它,并且必须自己单独安装才能使用它)。因为可能存在版本冲突,安装具有其他包所需依赖项的包可能会导致问题,因此最好不要将给定用户使用的所有包都推送到系统安装位置。

  • 如果是单用户计算机,则安装到该--user位置几乎没有区别。它将安装到不同的文件夹中,可能需要或可能不需要将其添加到路径中,具体取决于包及其使用方式(许多包安装命令行工具,这些工具必须位于从 shell 运行的路径上) .
  • 如果是多用户机器,--user优先使用 root/sudo 或需要管理员安装并影响每个用户的 Python 环境,除非管理员希望默认提供给所有用户的通用包的情况。
    • 注意: 根据评论,在大多数 Unix/Linux 安装中已经指出系统安装应该使用通用包管理器,例如apt, 而不是pip

使用虚拟环境

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

软件包默认安装到虚拟环境中,但如果您使用--user它,则会强制它安装在虚拟环境之外的用户 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. 我在问答、文档以及在我的 PC 上实际使用此命令时发现了关于默认值的冲突信息,但它们位于用户主目录下(~*nix 中的快捷方式,c:\users\<username>通常用于 Windows)。


其他详情

--user选项并非对每个命令都有效。例如,pip uninstall将在安装包的任何位置(在用户文件夹、虚拟环境文件夹等中)查找和卸载包,并且该--user选项无效。

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

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

  • 您会考虑重新表述第一部分吗?在 Python 虚拟环境之外,最好完全避免使用没有“--user”的“pip install”。这会将 Python 包安装在真正应该留给系统包管理器的位置(例如 Debian/Ubuntu 中的“apt”)。最好不要乱搞,这会导致很多问题。如果 Python 包需要对所有用户可用,则使用操作系统的包管理器,但不要执行“sudo pip install ...”。另一种选择是“sudo pip install --target ...”。在 Windows 上,这不是一个问题。 (2认同)

rgo*_*gov 11

其他答案提到site.USER_SITE放置Python包的位置。如果您要查找二进制文件,请输入{site.USER_BASE}/bin

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

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


Edm*_*cho 8

在MAC OS上,使用该--user标志的原因是为了确保我们不会破坏操作系统所依赖的库.甲保守许多MAC OS用户的方法是避免在安装或与需要的命令更新PIP sudo.因此,这包括安装到/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.我怀疑这是因为如上所述,安装到/usr/local/bin需要sudo,这为系统库造成代价高昂的错误打开了大门.因此,安装进入~/.local/bin是避免这种风险的可靠方法.

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

最后,程度有安装软件包到的好处/usr/local/bin,我不知道它是有道理的,从改变目录的所有者rootuser这样可以避免必须使用,sudo同时仍然可以防止进行依赖于系统的更改.*这是一个安全默认值,它是过去经常使用Unix系统(如服务器)的遗留物吗?或者至少,对于没有托管服务器的MAC用户来说,这是一个好方法吗?

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

- E.


use*_*749 5

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

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