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

2025-01-06 08:32:00
admin
原创
94
摘要:问题描述:从pip install --help:--user Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%Python on Windows...

问题描述:

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是一个可怕的虫洞,里面充满了我不理解的有趣的类Unix主题。

用简单的英语来说 的目的是什么--user?为什么安装包很~/.local/重要?为什么不直接把可执行文件放在我的 中$PATH


解决方案 1:

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

--user让 pip 在你的主目录中安装包,这不需要任何特殊权限。

解决方案 2:

只是一个警告:

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

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

解决方案 3:

没有虚拟环境

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

  • 请参阅PIP 用户指南中的用户安装。

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

  • 如果是单用户计算机,则安装到该位置几乎没有区别--user。它将被安装到不同的文件夹,可能需要或不需要添加到路径中,具体取决于包及其使用方式(许多包安装的命令行工具必须在路径上才能从 shell 运行)。

  • 如果是多用户机器,--user则最好使用 root/sudo 或要求管理员安装并影响每个用户的 Python 环境,除非管理员希望默认向所有用户提供通用软件包的情况。

    • 注意: 根据评论,在大多数 Unix/Linux 安装中,已经指出系统安装应该使用通用包管理器,例如apt,而不是pip

使用虚拟环境

  • 有关使用虚拟环境安装包的更多信息,请参阅Python 打包文档。

  • 阅读有关如何创建和使用虚拟环境以及Python VENV 文档中的venv命令。

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

默认情况下,包会安装到虚拟环境中,但如果使用--user它会强制将其安装在虚拟环境之外,在用户的 python 脚本目录中(在 Windows 中,目前对`c:/users<username>appdata
oamingpythonpython37scripts`我来说是 Python 3.7)。

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

如果您使用该参数安装虚拟环境--system-site-packages,您将可以访问 Python 的系统脚本文件夹。我相信这也包括用户 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

解决方案 4:

--user安装在site.USER_SITE

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

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

解决方案 5:

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

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

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

解决方案 6:

最好的方法是安装virtualenv,这样就不需要--user混淆了。您将获得更大的灵活性,并且不必担心每次使用pip安装包时都会破坏不同的 Python 版本和项目。

解决方案 7:

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

参考:为Neovim安装 Python (为 Neovim 设置 Python

我不太清楚为什么在 Mac 上安装到/usr/local/bin是有风险的,因为系统只依赖于/Library/Frameworks/和中的 Python 二进制文件/usr/bin。我怀疑这是因为如上所述,安装到/usr/local/bin需要sudo,这为犯系统库代价高昂的错误打开了大门。因此,安装到~/.local/bin是避免这种风险的万无一失的方法。

参考:在 Mac 上使用 Python(4.在 Macintosh 上使用 Python

最后,从将软件包安装到 的益处来看,将目录的所有者从更改/usr/local/bin为 是否有意义? 这样可以避免使用,同时仍可防止进行依赖于系统的更改。 这是 Unix 系统过去更常使用的安全默认设置吗(作为服务器)?或者至少,对于没有托管服务器的 Mac 用户来说,这只是一个不错的选择?root`user*sudo`

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

解决方案 8:

为什么将包安装到 ~/.local/ 很重要?为什么不直接将可执行文件放在我的 $PATH 中?

~/.local/bin directory理论上预计在你的$PATH

据这些人 说,使用时没有添加它是一个错误$PATH`systemd`

这个答案对此进行了更详细的解释。

即使你的发行版将目录包含~/.local/bin在内,$PATH也可能采用以下形式(在内部~/.profile):

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

第一次创建目录时,需要您注销并再次登录。

解决方案 9:

如果您使用自己的Conda环境,请不要使用--user。如果您使用公共 Conda 环境,请使用--user在家中安装软件包~/.local/lib/

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用