不能直接 make install,因为会覆盖 /usr/local/bin/python3 符号链接,导致 apt 等系统工具崩溃;必须用 make altinstall(安装 python3.13 等带版本号的二进制)或 --prefix 指定非系统路径,确保系统 Python 完全不受影响。

别用 sudo make install,否则会破坏系统 Python;必须用 make altinstall 或自定义 --prefix 路径。
为什么不能直接 make install
Ubuntu 系统严重依赖 /usr/bin/python3(软链到 apt 管理的版本),而 make install 默认把可执行文件放进 /usr/local/bin,并创建 python3 符号链接——这会覆盖系统级符号链接,导致 apt upgrade 失败、apt 自身崩溃(它用 Python 写的)。你不是在装一个新 Python,是在撬动整个包管理器的地基。
常见错误现象包括:
-
apt list --upgradable报错ImportError: No module named 'apt_pkg' -
sudo apt update直接退出,不输出任何内容 -
which python3返回/usr/local/bin/python3,但python3 --version显示 3.13,而系统服务已无法启动
make altinstall 是最简安全路径
它只安装带版本号的二进制,比如 python3.13 和 pip3.13,完全绕过 python3 和 pip3 这两个敏感名称。系统默认 Python 不受任何影响,你也能立刻用新版本。
立即学习“Python免费学习笔记(深入)”;
实操要点:
- 解压后进入源码目录,运行:
./configure --enable-optimizations(不加--prefix也行,altinstall本身已隔离) - 编译:
make -j$(nproc)(利用全部 CPU 核心,节省时间) - 关键一步:
sudo make altinstall—— 注意是altinstall,不是install - 验证:
python3.13 --version应输出Python 3.13.x;which python3.13通常是/usr/local/bin/python3.13
性能提示:--enable-optimizations 会让编译时间翻倍,但生成的解释器实际运行快 10% 左右,值得等待。
更稳妥:用 --prefix 装进用户目录
如果你在 CI/CD、容器或共享服务器上操作,或者单纯不想碰 /usr/local,就彻底避开系统路径。把 Python 装进自己家目录,零权限、零冲突、可随时 rm -rf。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
操作步骤:
- 先建目录:
mkdir -p $HOME/python313 - 配置时指定:
./configure --prefix=$HOME/python313 --enable-optimizations - 编译:
make -j$(nproc) - 安装:
make install(此时不用sudo,因为目标路径属你) - 加进环境:
echo 'export PATH="$HOME/python313/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
注意:pip3.13 会自动跟着装好,但它的 get-pip.py 默认源可能因网络受限;如需 pip,建议装完后手动运行:curl https://bootstrap.pypa.io/get-pip.py | $HOME/python313/bin/python3.13
依赖和常见报错怎么处理
Ubuntu 22.04 缺少某些头文件会导致 ./configure 报错,比如 ModuleNotFoundError: No module named '_ssl'(其实是 OpenSSL 开发库没装),或 readline 不可用(交互式 shell 退格键失效)。
一次性装齐所有必要依赖:
sudo apt update sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev \ libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev
特别注意:
-
libssl-dev缺失 → HTTPS 请求、pip 安装失败、SSL 模块 import 报错 -
libreadline-dev缺失 →python3.13启动后无法使用方向键、历史命令、Ctrl+R 搜索 -
libsqlite3-dev缺失 → Django、SQLAlchemy 等框架无法工作,import sqlite3失败
编译中途卡住?大概率是内存不足(尤其开 -j$(nproc) 时),改用 make -j2;或者磁盘空间不够(源码 + 编译产物约 3–4 GB),检查 df -h。
真正麻烦的从来不是编译成功,而是后续怎么让项目、CI、Docker、甚至你的 shell 历史记录都稳定指向这个新版本——altinstall 只解决“能用”,不解决“好用”。虚拟环境、pyenv、update-alternatives 才是长期维稳的关键,但那是另一层问题了。

















