
008 | Linux 上安装 Pythonapt / yum / 源码编译难度⭐⭐ |预计阅读10 分钟 |前置[007 macOS 安装 Python] |下一篇[009 Python 版本区别]1. 你为什么要看这篇Linux 上安装 Python 比 Windows 和 Mac 复杂——不是因为操作难而是因为选择多。不同发行版的包管理器不同apt vs yum vs dnf同一个发行版又可以源码编译安装。选错方式轻则版本太旧重则把系统 Python 搞炸。这一篇覆盖三种主流 Linux 发行版Ubuntu / CentOS / Arch的包管理器安装 通用的源码编译安装。读完你可以在任何一台 Linux 服务器上正确地部署 Python。2. Linux Python 安装全景图禁止Linux 装 Python 选哪种包管理器安装源码编译安装apt Ubuntu/Debianyum/dnf RHEL/CentOS/Fedorapacman Arch/Manjaro自定义版本 编译选项替换系统 Python图 2-1Linux Python 安装决策树。红色 决策起点蓝色 两大流派橙色 三种包管理器绿色 源码编译。灰色虚线 绝对不能做的事。3. 前置操作检查系统自带 Python# 几乎所有 Linux 发行版都自带 Python 3python3--version# 例如 Ubuntu 24.04 输出Python 3.12.3whichpython3# 例如输出/usr/bin/python3# 关键确认系统 Python 的路径ls-la/usr/bin/python3# 输出中如果有 - python3.12 这样的符号链接说明这是系统管理的版本核心原则再次强调/usr/bin/python3是系统的不要删、不要替换、不要用sudo pip install往里装包。你需要做的是在旁边另装一个或者用虚拟环境隔离。4. 方案一包管理器安装推荐4.1 Ubuntu / Debian 系apt# 1. 更新包索引sudoaptupdate# 2. 安装 Python 3.12及其完整工具链sudoaptinstallpython3.12 python3.12-venv python3.12-dev python3-pip# 3. 验证python3.12--version# Python 3.12.xpip3.12--version# pip 24.xapt 的版本滞后问题Ubuntu 22.04 LTS 的默认 apt 源中 Python 最高只到 3.10。如果你需要更新的版本添加 deadsnakes PPAPython 官方维护的 Ubuntu 源sudoaptupdatesudoaptinstallsoftware-properties-common-ysudoadd-apt-repository ppa:deadsnakes/ppa-ysudoaptupdatesudoaptinstallpython3.12 python3.12-venv python3.12-dev-y术语PPAPersonal Package Archive是 Ubuntu 的第三方软件源。deadsnakes 是 CPython 核心开发者维护的非官方 PPA提供了最新 Python 版本的 apt 包。它虽然叫dead snakes死蛇但可靠性在社区有共识。4.2 RHEL / CentOS / Fedora 系yum / dnf# CentOS 7 及更早用 yumsudoyuminstallpython3.12 python3.12-devel python3-pip-y# CentOS 8 / Fedora用 dnfsudodnfinstallpython3.12 python3.12-devel python3-pip-y# 验证python3.12--versionRHEL 系的默认源通常不包含最新 Python。CentOS 7 官方源最高只到 Python 3.6。如果你在 CentOS 7 上需要 3.12必须源码编译见第 5 节。4.3 Arch / Manjaropacman# Arch Linux 默认滚动升级Python 版本通常是最新的sudopacman-Spython python-pip python-virtualenv# 验证python--version# Arch 直接用 python不是 python3Arch 的哲学是上游发布什么我就给什么所以pacman -S python装的通常就是最新稳定版。注意Arch 上用python而不是python3。4.4 包管理器安装的目录结构# 可执行文件位置以 Ubuntu deadsnakes 为例/usr/bin/python3.12# 解释器/usr/bin/pip3.12# pip# pip install 的包安装位置/usr/local/lib/python3.12/dist-packages/# apt 安装的包~/.local/lib/python3.12/site-packages/# pip install --user 安装的包注意到dist-packages和site-packages两个不同的目录名——这是 Debian/Ubuntu 系特有的约定apt 装到dist-packagespip 装到site-packages。两者都在 Python 的搜索路径中但分开管理防止冲突。5. 方案二源码编译安装当包管理器没有你要的版本如 CentOS 7 需要 Python 3.12或你需要自定义编译选项如开启--enable-optimizations源码编译是最可靠的选择。5.1 完整编译流程下载源码 .tar.xz安装编译依赖./configure --enable-optimizationsmake -j N 编译make test 可选但推荐sudo make altinstall图 5-1源码编译流程。红色 起始步骤蓝色 前置准备橙色 编译核心步骤绿色 最终安装。注意是altinstall不是install。# 第一步安装编译依赖 # Ubuntu / Debiansudoaptupdatesudoaptinstallbuild-essential libssl-dev zlib1g-dev\libbz2-dev libreadline-dev libsqlite3-devcurl\libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev\libffi-dev liblzma-dev-y# CentOS / RHELsudoyum groupinstallDevelopment Tools-ysudoyuminstallopenssl-devel bzip2-devel libffi-devel\readline-devel sqlite-devel xz-devel-y# 第二步下载源码 cd/tmpcurl-Ohttps://www.python.org/ftp/python/3.12.7/Python-3.12.7.tar.xztar-xfPython-3.12.7.tar.xzcdPython-3.12.7# 第三步配置编译选项 ./configure --enable-optimizations--prefix/usr/local# --enable-optimizations开启 PGOProfile Guided Optimization# 编译时间增加约 2 倍但运行时性能提升 10-20%# --prefix/usr/local 安装到 /usr/local 而不是覆盖系统 Python# 第四步编译-j 后面跟 CPU 核心数make-j$(nproc)# 第五步可选运行测试套件 maketest# 这一步耗时 5-15 分钟但能确保编译出的 Python 没有暗病# 第六步安装 sudomakealtinstall# 关键是 altinstall不是 install# install → 覆盖系统的 python3 → 系统可能炸# altinstall → 只安装 python3.12 → 系统 python3 保持原样5.2altinstallvsinstall为什么这一字之差至关重要# make install 会做的事危险# 创建 /usr/local/bin/python3 符号链接 → 覆盖系统默认行为# make altinstall 会做的事安全# 只创建 /usr/local/bin/python3.12 ← 带版本号不碰 python3 这个别名# 验证whichpython3.12# /usr/local/bin/python3.12python3.12--version# Python 3.12.75.3 卸载源码编译的 Python# 删除安装的文件sudorm-rf/usr/local/bin/python3.12*sudorm-rf/usr/local/lib/python3.12/sudorm-rf/usr/local/include/python3.12/# 删除源码目录rm-rf/tmp/Python-3.12.76. 踩坑与避坑坑 1make install把系统 Python 覆盖了症状安装完成后python3指向了你编译的版本系统工具如apt、software-properties开始报 Python 相关的错误。修复如果你还没重启终端——立刻执行# 恢复系统 Python 的符号链接sudoln-sf/usr/bin/python3.10 /usr/bin/python3# 版本号按实际调整# 或者更根本的重装系统的 Python 包sudoaptinstall--reinstallpython3防御永远用sudo make altinstall养成肌肉记忆。坑 2编译时缺少 OpenSSL 导致 pip 无法使用 HTTPS症状python3.12-mpipinstallrequests# 报错pip is configured with locations that require TLS/SSL,# however the ssl module in Python is not available.原因编译前没有安装libssl-devUbuntu或openssl-develCentOS。Python 的ssl模块需要这些头文件才能编译进去。修复# 安装缺失的 SSL 开发库sudoaptinstalllibssl-dev-y# Ubuntu# sudo yum install openssl-devel -y # CentOS# 重新编译安装cd/tmp/Python-3.12.7 ./configure --enable-optimizations--prefix/usr/localmake-j$(nproc)sudomakealtinstall坑 3源码编译后python3.12找不到pip症状python3.12 -m pip提示No module named pip。原因编译时缺少libffi-dev或libbz2-dev导致ensurepip模块未编译进去。修复# 下载 get-pip.py 手动安装curl-sShttps://bootstrap.pypa.io/get-pip.py|python3.12 pip3.12--version# 验证7. 总结与自测四个核心结论能用包管理器就不要源码编译——apt/dnf/pacman 安装的 Python 有发行版团队维护安全更新自动推送。源码编译是你自己负责维护。需要新版本但包管理器没有Ubuntu 加 deadsnakes PPACentOS 老版本源码编译Arch 直接用pacman——三种场景三种方案。altinstall是救命稻草——Makefile 里这个选项保护了系统 Python 不被覆盖。记不住也别记错。编译前先把开发库装全——libssl-dev、libffi-dev、libbz2-dev是三大金刚缺一个后患无穷。自测题Q1源码编译时以下哪个命令是正确的安装方式A.sudo make installB.sudo make altinstallC.sudo make python3Q2Ubuntu 上pip install的包默认装到哪个目录A./usr/lib/python3/dist-packages/B./usr/local/lib/python3.12/dist-packages/或~/.local/lib/python3.12/site-packages/C./opt/python3/packages/答案见文末下一篇预告[009 认识 Python 版本2.x 与 3.x 的区别]——Python 2 为什么死了3.10/3.11/3.12/3.13 各自引入了什么如何选择版本自测答案Q1 → Baltinstall不覆盖系统python3别名 | Q2 → Bapt 装的包在dist-packagespip 装的默认在site-packages