绝大多数人不该在Ubuntu 22.04上源码编译Python 3.12,应优先使用deadsnakes PPA提供的安全可更新包;仅当需定制模块、禁用功能或构建极简容器时才编译,且须装齐依赖、加--enable-optimizations、--with-ensurepip=install、--prefix=/opt/python-3.12.5三个关键configure选项。

绝大多数人不该在 Ubuntu 22.04 上源码编译 Python 3.12——系统自带的 python3(3.10)已足够稳定,而 deadsnakes PPA 提供的 python3.12 包更安全、可更新、无路径冲突。只有当你明确需要未打包的补丁、禁用某模块(如 sqlite3)、或构建极简容器运行时,才该走源码编译这条路。
configure 失败常见报错及对应依赖补全
运行 ./configure 后若提示 ERROR: The required library readline was not found 或 ModuleNotFoundError: No module named '_ssl',说明系统缺开发头文件,不是 Python 本身的问题。
-
libreadline-dev缺失 → 交互式 shell 没方向键、历史记录,import readline报错 -
libssl-dev缺失 →_ssl模块编译失败,pip install直接 SSL 连接拒绝 -
zlib1g-dev缺失 →import zlib失败,tarfile、gzip不可用 -
libffi-dev缺失 →_ctypes模块无法构建,ctypes导入失败(尤其影响--enable-optimizations)
一次性装齐(含所有已知变体):
sudo apt update && sudo apt install -y \ build-essential zlib1g-dev libncurses5-dev libgdbm-dev \ libnss3-dev libssl-dev libreadline-dev libsqlite3-dev \ wget curl llvm libffi-dev libbz2-dev liblzma-dev tk-dev
configure 参数必须加的三个关键选项
漏掉任一参数,装出来的 Python 很可能无法正常使用 pip、缺少基础模块、或性能严重打折。
-
--enable-optimizations:启用 PGO(Profile-Guided Optimization),启动快约 10%,执行快 5–15%,但编译时间翻倍;不加则生成的二进制性能明显偏低 -
--with-ensurepip=install:强制内置 pip 安装逻辑,否则make install后pip3.12命令根本不存在 -
--prefix=/opt/python-3.12.5:必须指定独立安装路径;绝对不要用/usr/local(会和系统python3符号链接冲突)或/usr(破坏 apt 管理)
示例完整命令:
./configure --enable-optimizations \ --with-ensurepip=install \ --prefix=/opt/python-3.12.5
make install vs make altinstall 的本质区别
make install 会把 python3.12 和 pip3.12 装到 --prefix 下的 bin/ 目录,但不会创建 python3 或 pip3 的软链;make altinstall 是 make install 的一个别名,只在 Python 源码中定义为“不覆盖系统默认解释器”,但它**不改变安装路径,也不自动处理 PATH**。
- 如果你用了
--prefix=/opt/python-3.12.5,那make install和make altinstall效果完全一样 - 真正起作用的是后续手动加 PATH:
export PATH="/opt/python-3.12.5/bin:$PATH"到~/.bashrc - 千万别运行
sudo ln -sf /opt/python-3.12.5/bin/python3.12 /usr/bin/python3——这会让apt、update-manager等系统工具崩溃
验证是否生效:
which python3.12 # 应输出 /opt/python-3.12.5/bin/python3.12 /opt/python-3.12.5/bin/python3.12 -c "import ssl; print(ssl.OPENSSL_VERSION)" # 应正常输出 OpenSSL 版本
pip install 失败时最该查的三件事
装完发现 pip3.12 install requests 报 SSLError 或连接超时,别急着重装,先确认:
- 检查 OpenSSL 绑定:
/opt/python-3.12.5/bin/python3.12 -c "import ssl; print(ssl.OPENSSL_VERSION)"—— 输出应含OpenSSL 3.0.2或更高,若显示0x0或报错,说明libssl-dev没装对或 configure 时没识别到 - 确认 pip 是否真被装上:
/opt/python-3.12.5/bin/pip3.12 --version,若提示 command not found,说明--with-ensurepip=install没生效或 configure 阶段就跳过了 - 临时绕过证书验证测试连通性:
/opt/python-3.12.5/bin/pip3.12 install --trusted-host pypi.org --trusted-host files.pythonhosted.org requests—— 若成功,说明是证书信任链问题,不是网络或模块缺失
复杂点在于:Python 编译时的 OpenSSL 路径、运行时加载的 so 文件、以及系统 ca-certificates 包三者必须对齐;一旦错位,pip 就成哑巴,且错误信息极其模糊。这个细节,90% 的教程都一笔带过。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











