[英]What is the purpose of "pip install --user ..."?
从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
用简单的英语表达的目的是什么? 为什么将 package 安装到~/.local/
很重要? 为什么不把可执行文件放在我的$PATH
某处?
pip 默认将 Python 包安装到系统目录(例如/usr/local/lib/python3.4
)。 这需要root访问权限。
--user
而是在您的主目录中制作 pip 安装包,这不需要任何特殊权限。
--user
安装在site.USER_SITE
。
就我而言,它是/Users/.../Library/Python/2.7/bin
。 所以我已将其添加到我的 PATH(在~/.bash_profile
文件中):
export PATH=$PATH:/Users/.../Library/Python/2.7/bin
其他答案提到site.USER_SITE
作为放置 Python 包的位置。 如果您正在寻找二进制文件,请访问{site.USER_BASE}/bin
。
如果要将此目录添加到 shell 的搜索路径,请使用:
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
pip <command> --user
更改当前 pip 命令的范围以在当前用户帐户的本地 python 包安装位置上工作,而不是系统范围的包安装位置,这是默认值。
这仅在多用户机器上才真正重要。 安装到系统位置的任何内容对所有用户都是可见的,因此安装到用户位置将使该软件包安装与其他用户分开(他们不会看到它,并且必须自己单独安装才能使用它)。 由于可能存在版本冲突,安装具有其他包所需依赖项的包可能会导致问题,因此最好不要将给定用户使用的所有包都推送到系统安装位置。
--user
位置几乎没有区别。 它将安装到不同的文件夹中,可能需要或可能不需要将其添加到路径中,具体取决于包及其使用方式(许多包安装命令行工具,这些工具必须位于从 shell 运行的路径上) .--user
最好使用根/须藤或需要管理员安装和影响着每一个用户的Python环境,除了在普通包装的情况下,该管理员希望提供给默认情况下,所有用户.
apt
,而不是pip
。venv
命令的信息。 活动 venv/virtualenv 环境中的--user
选项将安装到本地用户 python 位置(与没有虚拟环境时相同)。
软件包默认安装到虚拟环境中,但如果您使用--user
它将强制它安装在虚拟环境之外的用户 python 脚本目录中(在 Windows 中,当前为c:\\users\\<username>\\appdata\\roaming\\python\\python37\\scripts
对我来说是 Python 3.7)。
但是,您将无法从虚拟环境中访问系统或用户安装(即使您在虚拟环境中使用了--user
)。
如果您使用--system-site-packages
参数安装虚拟环境,您将可以访问 python 的系统脚本文件夹。 我相信这也包括用户 python 脚本文件夹,但我不确定。 但是,这可能会产生意想不到的后果,这不是使用虚拟环境的预期方式。
您可以使用python -m site --user-base
找到 python 的用户安装文件夹的位置。 我在问答、文档和实际在我的 PC 上使用此命令时发现了关于默认值的冲突信息,但它们位于用户主目录下(*nix 中的~
快捷方式和c:\\users\\<username>
通常用于 Windows)。
--user
选项并非对每个命令都有效。 例如pip uninstall
将在安装包的任何位置(在用户文件夹、虚拟环境文件夹等中)查找并卸载包,并且--user
选项无效。
使用pip install --user
东西将安装在只有当前用户帐户才能看到的本地位置,并且不需要 root 访问(在 *nix 上)或管理员访问(在 Windows 上)。
--user
选项修改所有接受它的pip
命令以查看/操作用户安装文件夹,因此如果您使用pip list --user
它只会显示您使用pip install --user
包。
最好的方法是安装virtualenv
而不需要--user
混淆。 您将获得更大的灵活性,而不必担心每次 pip 安装软件包时都会破坏不同的 Python 版本和项目。
在 macOS 上,使用--user
标志的原因是为了确保我们不会破坏操作系统所依赖的库。 许多 macOS 用户的保守方法是避免使用需要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
。 我怀疑这是因为如上所述,安装到/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
如果您使用自己的 conda env,请不要使用 --user。 如果您使用公共 conda env,请使用 --user 在家中安装 pkgs ~/.local/lib/。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.