必须用 make altinstall,因为它只安装 python3.13、pip3.13 等带版本号的二进制,避免覆盖系统关键的 python3 和 pip3 符号链接,防止 apt 崩溃、服务异常;而 make install 会强制覆盖 /usr/local/bin/python3,动摇包管理器根基。

不能直接 make install,否则会覆盖 /usr/local/bin/python3 符号链接,导致 apt 崩溃、系统服务异常——这不是装个新解释器,是动包管理器的根。
为什么必须用 make altinstall 而不是 make install
apt 本身是 Python 写的,硬依赖 /usr/bin/python3(由系统包管理),而 make install 默认把 python3 可执行文件放进 /usr/local/bin 并创建同名符号链接,直接覆盖系统级软链。常见崩溃现象包括:sudo apt update 静默退出、apt list --upgradable 报 ImportError: No module named 'apt_pkg'、which python3 返回 /usr/local/bin/python3 但系统服务已无法启动。
make altinstall 是唯一安全的默认路径安装方式:它只生成带版本号的二进制,如 python3.13 和 pip3.13,完全绕过 python3 和 pip3 这两个敏感名称,系统 Python 不受任何影响。
- 执行前确认当前
python3指向的是系统包管理版本:ls -l /usr/bin/python3应显示软链到/usr/bin/python3.x(如python3.10) - 安装后验证:
python3.13 --version应输出Python 3.13.x;which python3.13通常是/usr/local/bin/python3.13 - 别用
sudo make install—— 即使加了--prefix,若目标路径在/usr/local下且你没手动清理旧链接,仍可能残留冲突
./configure 必须加的两个参数
--enable-optimizations 和 --prefix 不是可选,是必须权衡的组合:
立即学习“Python免费学习笔记(深入)”;
-
--enable-optimizations:启用 PGO(Profile-Guided Optimization),让最终二进制运行快约 10%,但编译时间翻倍。不加的话,性能明显弱于 apt 或 deadsnakes 提供的预编译包 -
--prefix:仅当你不想碰/usr/local(比如 CI/CD、共享服务器、或怕后续清理麻烦)才强制指定,例如--prefix=$HOME/python313。此时用make install(不用 sudo),再把$HOME/python313/bin加进$PATH;但注意:不要软链python3.13到/usr/local/bin,否则又回到冲突起点 - 如果只用
make altinstall,--prefix可省略——altinstall本身已隔离命名空间,--enable-optimizations却不能省
依赖缺失会导致编译失败或 pip 不可用
Ubuntu 22.04 的 build-essential 不包含 Python 编译所需的所有头文件和库,漏装会导致 ./configure 报告模块 disabled(如 _ssl、_sqlite3、readline),最终 pip 无法联网或虚拟环境不可用。
必须一次性装全(顺序无关,但缺一不可):
sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev curl wget- 特别注意:
libnss3-dev和libssl-dev缺一不可,否则pip3.13 install requests会报 SSL 错误;libreadline-dev缺失则交互式 shell 无历史记录和方向键支持 - 别信 “只装 build-essential 就够了” 的简化教程——那是 apt 安装场景,源码编译必须显式声明所有依赖
验证安装后最易被忽略的三件事
装完 python3.13 不等于能用:很多用户卡在 pip、venv、或 PATH 上,不是编译失败,而是后续链路断了。
- 运行
python3.13 -m ensurepip --upgrade:源码编译默认不带 pip,make altinstall后pip3.13可能不存在或版本极旧,这步强制初始化并升级 - 测试虚拟环境:
python3.13 -m venv testenv && source testenv/bin/activate && python -c "import ssl; print('ok')"—— 若报错ModuleNotFoundError: No module named '_ssl',说明libssl-dev没装或 configure 时没检测到 - 别改系统默认
python3:用update-alternatives或 alias 管理多版本,但绝不要sudo ln -sf /usr/local/bin/python3.13 /usr/bin/python3,这是 apt 崩溃的直接导火索


















