如何优雅解决 Ubuntu 下的 --break-system-packages 警告
为什么会有 --break-system-packages 警告?
从 Ubuntu 22.04 开始,Python 环境被标记为“externally-managed”,这意味着 Ubuntu 不建议在全局系统环境中使用 pip 安装 Python 包。这个变更源自 PEP 668,旨在防止通过 pip 安装的 Python 包与使用 apt 安装的系统包相互冲突,确保系统的稳定性和一致性。
当你尝试在这样的环境中使用 pip install 时,可能会看到以下错误提示:
1 | error: externally-managed-environment |
1 | venv |
三种优雅的解决方法
方法一:使用 --break-system-packages 选项
对于临时性的包安装需求,你可以使用 --break-system-packages 选项来忽略警告,直接在全局环境中安装包:
1 | pip install redis --break-system-packages |
注意事项:
这种方法简单直接,但在较低版本的 Ubuntu 系统中(如 22.04 以下),可能会报错,因为 --break-system-packages 是较新版本中引入的选项。
方法二:设置环境变量
为了在不同版本的 Ubuntu 系统上都能使用 pip install 而不受警告的干扰,可以临时设置一个环境变量 PIP_BREAK_SYSTEM_PACKAGES,这样就可以避免使用额外的命令选项:
1 | PIP_BREAK_SYSTEM_PACKAGES=1 pip install redis |
这种方法适用于所有版本的 Ubuntu 系统,并且不需要修改系统配置文件。

方法三:将环境变量永久添加到系统中
如果你习惯直接使用 pip install 命令,可以将 PIP_BREAK_SYSTEM_PACKAGES 设置为永久环境变量,这样你就不必每次都手动添加选项或环境变量。
- 编辑你的
.bashrc文件:
vim ~/.bashrc
- 在文件末尾添加以下行:
export PIP_BREAK_SYSTEM_PACKAGES=1
- 使配置生效:
source ~/.bashrc
通过将这个环境变量添加到 .bashrc 文件中,你就可以在任何版本的 Ubuntu 系统上直接使用 pip install 命令,而不会再遇到 --break-system-packages 警告。这种方法适合那些经常需要安装各种 Python 包的开发者。
额外提示:了解官方建议的替代方案
虽然我们提供了几种解决方法来跳过系统的限制,但了解官方建议的做法也很重要。Ubuntu 官方建议以下几种方法来管理 Python 包:
1. 使用虚拟环境(venv):隔离项目的依赖关系,避免与系统包冲突。
1 | python3 -m venv myenv |
2. 使用 pipx 安装应用程序:pipx 是一个更现代化的工具,适用于安装 Python 应用程序,它会为每个应用自动创建一个隔离的环境。
1 | pipx install redis |
这些方法虽然更加安全和规范,但对于一些简单的脚本和小型项目,可能显得过于复杂。
总结
在 Ubuntu 的新版本中,pip install 命令触发的 --break-system-packages 警告是为了保证系统环境的安全和稳定。我们介绍了三种解决方法,让你可以灵活地选择最合适的方式继续使用 pip install 命令。如果你只是需要快速安装一个包,添加命令选项或环境变量就足够了;如果你想更永久地解决这个问题,修改系统的环境变量配置是一个不错的选择。
无论你选择哪种方法,确保了解这些变更背后的原因,以及它们如何影响系统的安全和稳定性,始终是最重要的。