Ubuntu怎么通过apt安装Python 3.8并设为默认
本文详细讲解在Ubuntu系统中通过官方apt及deadsnakes PPA源安装Python 3.8的完整步骤,并利用update-alternatives机制将其配置为系统默认命令,同时深入剖析依赖风险与安全回滚方案。
在 Ubuntu 系统中通过 apt 安装特定历史版本的 Python 3.8 并将其设为命令行默认版本,标准解决路径分为两步:首先借助 Ubuntu 原生仓库或社区公认的 ppa:deadsnakes/ppa 源,通过 apt install python3.8 获取完整的独立二进制及其扩展支持包;随后使用 Linux 官方标准版本管理工具 update-alternatives,为系统 python3(或 python)命令注册多个候选路径并指定优先级,从而完成默认版本的平滑指向。
一、操作前的系统版本确认与源选择
在直接执行安装指令前,先搞清楚当前 Ubuntu 的具体版本至关重要,因为不同 Ubuntu 发行版在官方主源中的 Python 策略有所不同:
- Ubuntu 20.04 LTS (Focal Fossa):系统原生默认自带的就是 Python 3.8,其官方 Universe 源中已包含完整的
python3.8软件包,无需额外添加第三方 PPA 即可直接apt install。 - Ubuntu 22.04 LTS (Jammy) 及 Ubuntu 24.04 LTS (Noble):系统默认版本分别为 Python 3.10 和 Python 3.12。在这些版本中,官方默认主源已不再收录 Python 3.8。因此,必须引入由 Ubuntu 核心开发者维护的 deadsnakes PPA 软件源,方可通过
apt获取安全可靠的 Python 3.8 构建包。
打开终端,首先执行以下命令查看发行版及当前环境自带的 Python 版本信息:
# 检查 Ubuntu 发行版本信息
lsb_release -a
# 检查当前默认的 python3 版本
python3 -V
Description: Ubuntu 22.04.4 LTS 以及 Python 3.10.12。请记下这个系统自带的原生版本号(如 python3.10),后续配置回退保护机制时需要用到。
二、通过 apt 安装 Python 3.8 及必要配套组件
确定环境后,即可开始配置软件源并安装 Python 3.8。若只安装单个主包,后续在使用 pip、编译 C 扩展或创建独立虚拟环境时极易遇到诸如 ensurepip is not available 或 Python.h: No such file or directory 的报错。因此,在安装时应一次性补齐模块支持包。
1. 添加 deadsnakes PPA 软件源并更新缓存
安装 software-properties-common 工具以确保 add-apt-repository 可用,随后将 deadsnakes 仓库加入系统并刷新包缓存:
# 1. 安装管理 PPA 的前置依赖
sudo apt update
sudo apt install -y software-properties-common
# 2. 导入 deadsnakes PPA 源(Ubuntu 20.04 用户可跳过此步)
sudo add-apt-repository ppa:deadsnakes/ppa -y
# 3. 刷新 APT 本地索引缓存
sudo apt update
2. 执行 APT 安装命令
通过 apt 安装 Python 3.8 主程序、头文件(dev)、虚拟环境工具(venv)以及分发支持组件(distutils):
# 安装 Python 3.8 及核心开发扩展包
sudo apt install -y python3.8 python3.8-venv python3.8-dev python3.8-distutils
安装完成后,系统内部已经在 /usr/bin/python3.8 生成了完全立即可用的二进制执行文件。我们可以通过直接指定版本号的方式测试其是否能够正常运行:
# 直接执行安装好的 3.8 二进制
python3.8 --version
Python 3.8.18(具体小版本号视当前源内最新补丁而定),证明 Python 3.8 已经成功安装在系统中。此时它与系统自带的 Python 彼此共存,互不干扰。
三、使用 update-alternatives 将 Python 3.8 设为默认
很多初学者在需要切换默认版本时,习惯于直接删除 /usr/bin/python3 并使用 ln -sf 强行链接到新版本。这种做法非常粗暴且不可控,极易在后续维护中遗留“幽灵软链”。
在 Ubuntu / Debian 体系中,官方提供的标准工具是 update-alternatives。该工具会在 /etc/alternatives/ 中创建受管软链,不仅支持基于权重的自动切换,还支持通过交互式菜单随时无损改回。
1. 将系统原生 Python 注册到底层候选中
为了保证日后可以随时切换回系统自带版本,我们必须先把系统原生的 Python(以 Ubuntu 22.04 自带的 Python 3.10 为例)注册进 alternatives,并赋予较低的优先级(例如 1):
# 语法:update-alternatives --install <链接路径> <主名称> <目标物理路径> <优先级>
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
注:如果你的原生系统是 Ubuntu 24.04,请将上述命令中的 /usr/bin/python3.10 替换为你系统当前实际的 /usr/bin/python3.12。
2. 将刚安装的 Python 3.8 注册为高优先级
接着注册我们需要的 python3.8,将其优先级设置为更高的数值(例如 2):
# 注册 Python 3.8 并赋予更高的优先级 2
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
由于优先级 2 > 1,在自动模式(Auto mode)下,update-alternatives 会立即自动将 /usr/bin/python3 切换为指向 /usr/bin/python3.8。
3. 验证当前生效版本与交互式切换
执行常规版本查询,检查全局 python3 命令是否已默认解析为 3.8:
# 检查默认版本
python3 -V
# 输出示例:
Python 3.8.18
如果你希望在多个已注册版本之间手动指定,可执行交互式配置命令:
# 唤起交互式选择菜单
sudo update-alternatives --config python3
终端会输出类似如下的候选项列表,读者只需输入对应的编号(Selection number)按回车即可完成实时切换:
There are 2 choices for the alternative python3 (providing /usr/bin/python3).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.8 2 auto mode
1 /usr/bin/python3.10 1 manual mode
2 /usr/bin/python3.8 2 manual mode
Press <enter> to keep the current choice[*], or type selection number:
四、关键注意事项:系统底层依赖风险与更稳妥的替代方案
将全局的 /usr/bin/python3 强行设为 Python 3.8 虽能满足特定老旧脚本的运行需求,但在 Ubuntu 现代版本(如 22.04 / 24.04)上存在不可忽视的系统隐患。
1. 为什么直接修改全局 python3 会带来风险?
在 Ubuntu 操作系统中,很多关键运维与桌面工具本质上都是用 Python 编写的,包括但不限于:
apt与add-apt-repository(依赖专用编译的apt_pkg.cpython-*.soC 扩展库);lsb_release与ufw防火墙前端脚本;gnome-terminal桌面终端应用。
这些系统级 Python 脚本的首行解释器声明通常为 #!/usr/bin/python3,且它们依赖的系统模块直接存放在 /usr/lib/python3/dist-packages/ 中。一旦你把全局 python3 切换为 3.8,当执行 sudo apt update 或添加源时,系统可能会抛出类似 ModuleNotFoundError: No module named 'apt_pkg' 的严重异常,甚至导致终端无法打开。
2. 两种更稳妥、更推荐的替代做法
方案 A:仅将无版本号的 python 命令设为 3.8(保留 python3)
如果你只是希望在终端中少敲一个数字、输入 python 就能调用 3.8,而让系统组件继续安全地使用其原生 python3,可以只针对 /usr/bin/python 建立软链或 alternatives:
# 仅将无版本号的 python 注册并指向 3.8
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
# 验证:python 调用 3.8,而 python3 依旧保持系统原生版本
python -V # 输出 Python 3.8.18
python3 -V # 输出 Python 3.10.x(系统工具正常运作)
方案 B:基于 venv 创建专属隔离环境(生产最佳实践)
现代 Python 开发的业界共识是“系统归系统,项目归项目”。通过独立虚拟环境开发,既能完全享受 Python 3.8 环境,又绝不碰触任何系统软链:
# 1. 进入项目目录,使用 3.8 创建虚拟环境
python3.8 -m venv my_project_env
# 2. 激活虚拟环境
source my_project_env/bin/activate
# 3. 激活后,当前 shell 内的 python 和 python3 均自动默认指向 3.8
(my_project_env) $ python -V
Python 3.8.18
(my_project_env) $ pip install --upgrade pip
五、紧急回滚:如何彻底复原与卸载
如果在切换默认版本后发现系统工具出现兼容性异常,或者任务完成后想要还原系统初始状态,可以通过以下方式迅速恢复:
1. 快速切换回系统原生默认版本
# 重新运行交互配置,选择系统原生版本(如 python3.10 或 3.12)
sudo update-alternatives --config python3
2. 从 alternatives 管理库中注销并移除 Python 3.8
如果你不再需要让 3.8 参与默认版本轮选,可将其从候选池中注销。执行后系统会自动恢复原生版本作为唯一默认项:
# 从 alternatives 中注销 python3.8 项
sudo update-alternatives --remove python3 /usr/bin/python3.8
# 确认复原结果
python3 -V
六、常见问题排查与问答
| 常见现象 / 报错 | 主要原因分析 | 具体解决方法 |
|---|---|---|
add-apt-repository: command not found |
精简版系统或新装环境缺少常用的软件属性管理组件 | 执行 sudo apt update && sudo apt install -y software-properties-common 后重试。 |
ModuleNotFoundError: No module named 'apt_pkg' |
修改了全局 python3,导致 apt 工具用 3.8 解释器加载原生版本的 C 扩展失败 |
执行 sudo update-alternatives --config python3 切回原生版本,或改用 python 别名方案。 |
python3.8 -m pip 提示未安装 pip |
apt 安装仅包含运行时核心,未内置独立 pip 组件 | 执行 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.8 单独安装对应版本的 pip。 |
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









