每次使用 pip 3 时如何解决“错误:外部管理环境”?

Apo*_*boy 247 python error-handling pip

错误信息:

\n
\n
error: externally-managed-environment\n\n\xc3\x97 This environment is externally managed\n\xe2\x95\xb0\xe2\x94\x80> To install Python packages system-wide, try apt install\n    python3-xyz, where xyz is the package you are trying to\n    install.\n\n    If you wish to install a non-Debian-packaged Python package,\n    create a virtual environment using python3 -m venv path/to/venv.\n    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make\n    sure you have python3-full installed.\n\n    If you wish to install a non-Debian packaged Python application,\n    it may be easiest to use pipx install xyz, which will manage a\n    virtual environment for you. Make sure you have pipx installed.\n\n    See /usr/share/doc/python3.11/README.venv for more information.\n\nnote: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.\nhint: See PEP 668 for the detailed specification.\n
Run Code Online (Sandbox Code Playgroud)\n
\n

我使用apt升级和更新。

\n

小智 196

您可以使用此处venv描述的Python 。

但是,如果您确实想以这种方式安装软件包,那么有几种解决方案:

  • 使用pip的论点--break-system-packages
  • 将以下行添加到~/.config/pip/pip.conf
[global]
break-system-packages = true
Run Code Online (Sandbox Code Playgroud)

  • .....当你使用`--user`时也会出现这个错误...... (28认同)
  • 1. 正如它所建议的,某些软件包可以通过“apt install xyz”安装,但这对我来说不适用于某些软件包 2. 如何将 Jupyter Notebooks 与 venv 一起使用? (3认同)
  • @Some我相信只有在有系统包需要破坏的情况下它才会破坏系统包。既然您说您的操作系统没有该软件包,那么您应该可以只使用一次“--break-system-packages”来安装“python2-virtualenv”。(如果 Debian 确实将其添加为软件包,您可能需要“pip uninstall”它。) (2认同)

Zl3*_*l3n 165

从 Python 3.11+ 开始我就遇到了这个错误,并且我已经使用以下方法传递了这个错误:

sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED
Run Code Online (Sandbox Code Playgroud)

  • 更好的是: `sudo mv /usr/lib/python3.11/EXTERNALY-MANAGED /usr/lib/python3.11/EXTERNALY-MANAGED.old` (28认同)
  • 请注意,这仍然可能会破坏您的系统 (2认同)
  • `rm` 与 `mv` ..以防万一您想恢复。 (2认同)
  • @BrettHolman您能否分享一个链接或解释,其中包含有关此危险的更多详细信息? (2认同)
  • 这个解决方案对我有用,我使用了 mv 选项顺便说一句 (2认同)

Alo*_*hor 44

--break-system-packages中的标志允许pip覆盖externally-managed-environment错误并在系统范围内安装 Python 包。

pip install package_name --break-system-packages
Run Code Online (Sandbox Code Playgroud)

注意:不应滥用此标志。

  • 确实如此,但不应滥用此标志。像 Jupyterlab 这样的大型项目带有许多依赖项(随着每个安装的扩展而不断增加),因此通过选择此路径而不是通过“pipx”安装(或从官方存储库,如果可用)安装,必然会与系统维护的包。 (3认同)

小智 37

我先安装了pipx :

apt install pipx
Run Code Online (Sandbox Code Playgroud)

然后我用来pipx安装radian

pipx install radian
Run Code Online (Sandbox Code Playgroud)

后来为了确认安装位置(在我的例子中是配置Visual Studio Code),我运行了:

pipx list
Run Code Online (Sandbox Code Playgroud)

  • 为什么/这是如何工作的?`pipx` 有什么作用? (9认同)

jne*_*nes 32

只是

python3 -m venv ~/.local --system-site-packages
Run Code Online (Sandbox Code Playgroud)

确保~/.local/bin在您的道路上

然后使用

~/.local/bin/pip install ... # --user is implied ;)
Run Code Online (Sandbox Code Playgroud)

您也许可以创建自己的~/py目录并从那里初始化所有内容。但是,我认为.local已经被PATH导入目录选取。


Gab*_*ein 13

Python 对于系统管理员来说就像地狱一样......不同的软件使用许多不同东西的不同版本。

有几次,我使用 pip3 安装东西......这会破坏其他东西。有时我将它与“apt-get install”混合使用。

这个错误信息就像天堂一样......因为它迫使我们做正确的事情。这意味着包管理器(UbuntuDebian)负责处理依赖项,而不是pip

这就是为什么我们有CondaMiniconda

您可以使用类似的东西创建一个环境

conda create --name thenameofmyapp python=3.8
Run Code Online (Sandbox Code Playgroud)

使用激活您的环境

conda activate pixray
Run Code Online (Sandbox Code Playgroud)

然后你可以“pip install -r requests.txt”,它不会破坏你的系统:)它只会在特定环境中安装东西。

  • 向我们这些老前辈询问“dll地狱” (2认同)

Anm*_*Anm 12

# rm /usr/lib/python3.11/EXTERNALLY-MANAGED

  • [PEP 668](https://peps.python.org/pep-0668/) 的创建是有正当理由的。忽视它是不明智的。 (7认同)
  • 应该有一个解释。例如,想法/要点是什么?来自[帮助中心](https://stackoverflow.com/help/promotion):*“...始终解释为什么您提出的解决方案是合适的以及它是如何工作的”*。请通过[编辑(更改)您的答案](https://stackoverflow.com/posts/76614012/edit) 进行回复,而不是在评论中回复(但是 *** *** *** *** *** ** * *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***[没有]( https://meta.stackexchange.com/a/131011)*** *** *** *** *** *** “编辑:”、“更新:”或类似内容 - 答案应显示为如果是今天写的话)。 (7认同)

Lib*_*ber 10

在您的操作系统中设置此环境:
PIP_BREAK_SYSTEM_PACKAGES 1

或者在你的dockerfile中写入:
ENV PIP_BREAK_SYSTEM_PACKAGES 1

https://veronneau.org/python-311-pip-and-breaking-system-packages.html


小智 10

  1. 打开终端
  2. 跑步sudo nano /etc/pip.conf
  3. 添加以下行:
     [global]
     break-system-packages = true
Run Code Online (Sandbox Code Playgroud)
  1. CTRL+X 然后 Y -> 按 Enter(在 Nano 编辑器中执行保存)

一切都已更新,现在您可以运行pip install <package_name>


小智 8

该问题来自 pip。只需运行该命令,它就会降级。

pip install pip==22.3.1 --break-system-packages
Run Code Online (Sandbox Code Playgroud)

这肯定会有帮助。

  • 这个解决方案显然对我有用。不知道什么时候会再次破裂。程序员总是让我们的生活变得一团糟。 (5认同)
  • 这可能会消除症状,但有什么风险呢?“`--break-system-packages`”听起来很可怕。您能解释一下吗?来自[另一个答案](/sf/ask/5292144441/#75696359):*“您的发行版试图防止您混合 apt 提供的包和 pip 提供的包。混合两个包管理器(这里是 apt 和 pip)总是一个坏主意”* (4认同)