Ubuntu 上的 pip 错误:外部管理环境 × 此环境是外部管理的

Fli*_*imm 17 python3 pip 23.04

我升级到 Ubuntu 23.04。现在,当我运行pip命令(使用安装sudo apt install python3-pip)时,出现以下错误:

\n
$ pip install --user <foobar>\nerror: 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

--user如果我想在用户范围 ( ) 而不是系统范围安装软件包该怎么办?我怎么做?

\n

Fli*_*imm 10

OMGUbuntu 上有一篇关于此的好文章:3 Ways to Solve Pip Install Error on Ubuntu 23.04

这是摘要。有三种方法可以解决这个问题:

1.使用repo版本

例如,如果您想安装requestsPython 库,您可以使用 APT 安装它,如下所示:

sudo apt install python3-requests
Run Code Online (Sandbox Code Playgroud)

这将在系统范围内安装该库。

并非 PyPI 上提供的所有软件包都已打包并包含在 Debian/Ubuntu 存储库中,因此此方法不适用于某些软件包。

venv或者: 2. 使用或创建虚拟环境virtualenv

通过运行以下命令确保venv已安装:

sudo apt install python3-venv
Run Code Online (Sandbox Code Playgroud)

要在名为 的目录中创建新的虚拟环境env,请运行:

python3 -m venv env
Run Code Online (Sandbox Code Playgroud)

要激活此虚拟环境(修改PATH环境变量),请运行以下命令:

source env/bin/activate
Run Code Online (Sandbox Code Playgroud)

现在您可以像在这个虚拟环境中一样安装库requests

pip install requests
Run Code Online (Sandbox Code Playgroud)

这些文件将安装在该env/目录下。

如果你想离开虚拟环境,可以运行:

deactivate
Run Code Online (Sandbox Code Playgroud)

如果您不想运行source env/bin/activateand deactivate,则可以通过为其路径添加前缀来运行可执行文件,如下所示:

 $ env/bin/pip install requests
 $ env/bin/python3
 >>> import request
 >>> help(requests)
Run Code Online (Sandbox Code Playgroud)

或者:3.使用pipx

pipx允许您在隔离环境中安装和运行 Python 应用程序。这是安装代表命令行应用程序的 PyPI 包的推荐方法。

要安装 pipx,请运行:

 sudo apt install pipx
Run Code Online (Sandbox Code Playgroud)

pipx 需要~/.local/bin/位于您的 PATH 中。您可以通过运行以下命令自动修改 shell 配置(例如~/.bashrc)以适当地修改 PATH:

 pipx ensurepath
Run Code Online (Sandbox Code Playgroud)

现在您可以从 PyPI 安装软件包,如下所示:

 pipx install pycowsay
Run Code Online (Sandbox Code Playgroud)

您可以运行刚刚安装的命令,如下所示:

$ pycowsay Mooo!

  -----
< Mooo! >
  -----
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,pipx~/.local/bin/在虚拟环境中的可执行文件中安装了一个符号链接:

$ ls -l ~/.local/bin/pycowsay
lrwxrwxrwx 1 flimm flimm 50 May 24 11:19 /home/flimm/.local/bin/pycowsay -> /home/flimm/.local/pipx/venvs/pycowsay/bin/pycowsay*
Run Code Online (Sandbox Code Playgroud)

或者: 4.传递--break-system-packages标志:

如果你想忽略警告,可以传递标志--break-system-packages

pip install --break-system-packages --user <foobar>
Run Code Online (Sandbox Code Playgroud)

不建议使用此方法,因为几个月或几年后,您可能会发现自己的 Python 软件包安装神秘损坏,并且忘记了您使用--break-system-packages和安装了其他冲突的 Python 软件包。