目 录CONTENT

文章目录

python3.12使用pip安装依赖报错问题排查

成培培
2025-09-10 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

今天将自己开发测试使用的ubuntu server系统进行了升级,升级到最新的Ubuntu 24.04.3 LTS,结果运行Python代码安装一些依赖时出现了一些问题。

问题现象

写了一个脚本需要依赖flask、redis等一些依赖,所以我就运行pip3 install flask安装依赖,结果遇到以下报错信息:

chengpei@ubuntu-cp:~$ pip install flask
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

note: 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.
hint: See PEP 668 for the detailed specification.

问题原因

查阅了相关资料了解到,是因为Python 3.12 在 Debian/Ubuntu 系统上的新机制(PEP 668),它阻止直接用 pip 在系统全局环境安装包,以免破坏系统自带的 Python 环境。
官方说明:https://peps.python.org/pep-0668
Ubuntu的python3.12是系统自带的,相关依赖是由系统包管理器(apt)管理的,而特定于 Python 的包管理工具(如 pip)来源并不一样,他们之间可能存在冲突,如果不加限制pip安装的依赖包可能会破坏系统自带环境。

解决方案

apt安装python依赖

既然系统包管理器(apt)可以管理python3相关依赖,那么我们可以直接使用apt安装我们需要的依赖,如我们想安装flask依赖可以运行以下脚本:

sudo apt update
sudo apt install python3-flask -y

这样我们就可以使用该依赖了,但是需要注意这个问题,apt 仓库里的 Flask 版本通常比较老(可能比 PyPI 落后几个大版本),如果只是学习或写 demo,可以用,但如果是新项目,不太推荐

pipx安装

如果你是要安装独立的 Python 应用(不是库,而是命令行工具),可以先安装pipx,然后用pipx安装你需要的应用 sudo apt install pipx -y,但 Flask 是库,不是应用,所以我没用pipx

虚拟环境安装依赖

先创建一个虚拟环境,然后在虚拟环境里安装需要的依赖:

# 安装虚拟环境工具(如果还没有)
sudo apt install python3-venv -y

# 创建虚拟环境
python3 -m venv my_venv

# 激活虚拟环境
source my_venv/bin/activate

# 在虚拟环境里安装 Flask
pip install flask

创建虚拟环境时,会创建一个你指定的my_venv文件夹,里面就是一个python3虚拟环境,激活虚拟环境后,再使用pip安装依赖时,所有的依赖会安装到虚拟环境文件夹的lib目录下,依赖统一管理比较推荐

总结

方式 优点 缺点 适用场景
apt (系统包管理器) 系统自带管理,稳定、安全
适合系统级 Python 脚本
安装速度快
版本老旧(落后 PyPI)
和 pip 管理可能冲突
依赖更新慢
系统服务、稳定性要求高的环境
pipx 每个工具独立虚拟环境,互不干扰
安装后直接可用(自动加到 PATH)
升级/卸载方便
只适合单个 CLI 工具,不适合项目依赖
不适合复杂依赖管理
安装全局命令行工具(如 httpieblackpoetryansible 等)
虚拟环境 (venv + pip) 完全隔离项目依赖,避免冲突
支持最新 PyPI 包
团队开发常用(配合 requirements.txt
灵活,可装任意组合
需要手动激活环境
略麻烦
开发应用/项目(如 Flask/Django/FastAPI 项目),团队协作环境

我这里采用虚拟环境 (venv + pip),所有依赖统一放在虚拟环境文件夹里,要删除也比较方便干净

0

评论区