【发布时间】:2021-07-15 19:48:14
【问题描述】:
我对预期的 pip 用法感到困惑。 Pip 随 Python 一起安装,这很棒,但是当新版本出来时我收到以下警告:
WARNING: You are using pip version 21.1.1; however, version 21.1.3 is available.
You should consider upgrading via the '/usr/local/opt/python@3.8/bin/python3.8 -m pip install --upgrade pip' command.
我按照说明使用他们提供的命令进行安装。但随后它会卸载我现有的 pip 并且无法安装新版本。
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.1.1
Uninstalling pip-21.1.1:
ERROR: Could not install packages due to an OSError: Cannot move the non-empty directory '/usr/local/lib/python3.8/site-packages/pip-21.1.1.dist-info/': Lacking write permission to '/usr/local/lib/python3.8/site-packages/pip-21.1.1.dist-info/'.
pip命令现在无法识别,升级pip官方documentation建议运行:
python -m pip install -U pip
这给出了相同的权限错误。
我在谷歌上搜索了这个错误,发现社区强烈建议不要从这些问题中使用 sudo(this 和 this)。他们还建议pip3 install --upgrade pip --user 也给出了同样的错误。普遍的共识是只在虚拟环境中安装 pip 包,但我对完全卸载 pip 犹豫不决。
所以我使用sudo 安装了 pip,但不清楚我是否无意中影响(或将影响未来)系统范围的安装,或者我将如何检查这些。
我不明白为什么在/usr/local/ 中安装pip 需要sudo,以及我是否应该只在虚拟环境中使用 pip 而永远不要在它之外使用
【问题讨论】:
-
因为
/usr/local文件夹归root所有。你不能改变它。作为一项规则,我倾向于使用sudo安装大多数软件包,以便它们在任何地方都可用。 -
一般来说,/usr/local 是根拥有的区域。最好保持权限严格,因为您安装的频率比运行频率低得多。如果您使用的是所有用户都可以使用的系统范围的 python,那么不允许用户安装他们想要的任何包是有意义的。任何用户都可以使用用户在本地安装包/库。说了这么多,用 sudo 升级 pip 就好了。
-
首先在
/usr/local/opt下安装了什么pip?这是唯一应该升级pip的事情。如果您想要更新版本而不接触/usr/local/opt,请先创建一个虚拟环境。 -
pip不是标准 Python 发行版的一部分;这是一个第 3 方工具,某些特定发行版与 Python 一起安装。 -
您使用的 Python 是否与您的发行版一起提供?特别是
pip是您的包管理器中的一个包吗?如果是这样,请使用包管理器升级pip。 (不过,升级可能无法立即通过该渠道获得。或者,卸载该渠道并使用python -m ensurepip安装pip
标签: python python-3.x pip