绝大多数人不该在ubuntu上源码编译python3,应直接用apt安装;仅当需未入库版本、特定编译选项、离线环境或极简容器时才考虑编译,且须用--prefix指定独立路径并装齐依赖。

Ubuntu直接用apt装Python3就行,别碰源码编译
绝大多数人根本不需要、也不该在Ubuntu上源码编译Python3。系统自带的python3已足够新(22.04起默认是3.10,24.04是3.12),且通过apt安装能自动处理依赖、更新和安全补丁。源码编译只会带来路径冲突、包管理混乱、pip失效、apt upgrade报错等真实问题。
什么时候才真得编译?——只限这几个硬需求
只有满足以下任一条件时,才考虑源码编译:
- 需要某个尚未进入Ubuntu仓库的Python小版本(比如3.13.0a4用于测试)
- 必须启用特定编译选项(如
--with-lto、--enable-optimizations、禁用sqlite3模块) - 目标环境完全离线,且无法用
deadsnakes等PPA替代 - 你在为嵌入式或极简容器构建最小Python运行时
普通开发、Docker镜像、CI/CD、虚拟环境,全都不在此列。
如果非编译不可:绕开/usr/local/bin这个坑
默认make install会把可执行文件放进/usr/local/bin,这会覆盖apt管理的python3符号链接,导致apt后续升级失败,甚至破坏apt自身(它依赖系统Python)。正确做法是:
- 用
--prefix指定独立安装路径,例如--prefix=$HOME/python313 - 编译前确认已装齐依赖:
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 - 务必加
--enable-optimizations(否则性能差一截),但要接受编译时间翻倍 - 安装后手动把
$HOME/python313/bin加进$PATH,且**不要**软链到/usr/local/bin
示例关键步骤:
./configure --prefix=$HOME/python313 --enable-optimizations make -j$(nproc) make install echo 'export PATH="$HOME/python313/bin:$PATH"' >> ~/.bashrc source ~/.bashrc python3.13 --version
更安全的替代方案:pyenv 或 deadsnakes PPA
想用多个Python版本?用pyenv;想用较新稳定版(如3.11/3.12)?加deadsnakes PPA:
-
pyenv完全用户态,不碰系统路径:curl https://pyenv.run | bash,然后按提示配置PATH和pyenv init -
deadsnakes由社区维护,兼容Ubuntu官方包体系:sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt update && sudo apt install python3.12 - 两者都支持
pip、venv、setuptools开箱即用,不会干扰apt
源码编译看似“可控”,实则把版本管理、动态库链接、交叉依赖这些脏活全甩给用户自己扛。真正省事的路,从来不是从./configure开始的。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











