Ubuntu源码编译安装Python 3.8详细步骤

林见深
林见深
发布时间:2026-10-22 | 5人浏览过
原创

在Ubuntu系统中,系统自带的Python环境直接支撑着apt软件包管理器、系统桌面组件以及多项基础服务。如果直接覆盖或替换系统预装的Python版本,极易导致系统核心工具崩溃。通过官方源码在本地编译安装Python 3.8,既能满足遗留项目或特定依赖对该版本的严格要求,又可以通过独立路径与系统环境完全隔离,是安全可靠的部署方案。

本文将按照实际生产环境标准流程,详细讲解从安装编译依赖、下载并核对源码、配置编译参数、使用安全安装模式(altinstall)到环境验证与虚拟环境搭建的完整操作步骤。

Ubuntu源码编译安装Python 3.8详细步骤

图1:Python 3.8 源码编译核心操作阶段流程图

一、准备编译环境与系统依赖库

Python 解释器本身由 C 语言编写,其标准库中的大量核心功能(例如 HTTPS 网络请求、数据压缩、动态链接库调用和本地轻量数据库)均依赖底层 C 语言动态开发库。如果在编译配置前缺少对应的开发头文件,Python 仍然能够完成编译,但会在编译总结中静默跳过这些关键模块。最常见的后果就是安装完成后 pip 无法使用 HTTPS 报错 _ssl 缺失,或调用第三方扩展时提示找不到 _ctypes。

在开始编译前,需要先更新本地 apt 软件源索引,并一次性安装 C 编译器(gcc)、构建工具(make)以及所有 Python 3.8 核心扩展库所需的系统依赖包:

# 1. 更新 apt 索引并安装基础构建依赖
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 \
    wget libbz2-dev liblzma-dev

安装完成后,系统便具备了编译 Python 所需的完整环境。下表列出了关键系统包所对应的 Python 内部模块及功能:

系统依赖包名称 对应 Python 模块 未安装时的直接表现与影响
build-essential gcc、g++、make 工具链 无法启动编译,make 命令报错退出
libssl-dev _ssl、hashlib pip 无法发起 HTTPS 请求,无法在线安装任何 Python 轮子包
libffi-dev _ctypes 无法调用 C 原生动态库,导入 ctypes 时报 ModuleNotFoundError
zlib1g-dev zlib、zipfile 无法解压 .whl 包和处理 zip 压缩格式
libsqlite3-dev sqlite3 无法使用内置 SQLite 数据库功能
libbz2-dev、liblzma-dev bz2、lzma 处理特定压缩数据流时报错缺失扩展模块
Ubuntu源码编译安装Python 3.8详细步骤

图2:Ubuntu 基础 C 开发依赖与 Python 3.8 关键扩展组件对应映射图

二、下载并解压 Python 3.8 官方源码

在 Linux 生产环境中,通常推荐将编译安装的源码包放置在 /usr/src 或用户的临时编译目录中。Python 3.8 系列的最后一个安全维护微版本为 3.8.18(源码维护归档版)。我们使用 wget 从 Python 官方 FTP 服务器直接下载压缩包并完成解压:

# 2. 进入系统源码归档目录并下载官方源码
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz

# 3. 解压源码压缩包
sudo tar -xf Python-3.8.18.tgz

# 4. 进入解压后的源码根目录
cd Python-3.8.18

解压后,源码根目录内包含了 Python 解释器的全部 C 源码(位于 Parser/ 与 Objects/ 目录)、标准库 Python 实现(位于 Lib/ 目录)、扩展模块(位于 Modules/ 目录)以及自动化配置脚本 configure。

三、配置编译参数与开启 PGO 优化

进入源码目录后,首先需要通过执行 ./configure 脚本对当前系统的 CPU 架构、内核版本、头文件路径以及编译参数进行自动化探查,并生成用于指导后续编译的 Makefile 文件。

对于 Python 3.8,我们建议开启以下两项核心参数:

  • --enable-optimizations:启用 Profile Guided Optimization(基于执行配置文件的引导优化,PGO)以及 LTO(Link Time Optimization,链接时优化)。开启此项后,编译过程会先构建一个临时解释器,自动运行一套完整的 Python 官方基准测试集收集运行热点,随后使用收集到的热点数据对最终二进制进行二次重编译优化。这能够使编译生成的 Python 解释器在实际运行代码时提升约 10% 到 20% 的执行速度。
  • --with-ensurepip=install:在安装 Python 解释器的同时,自动同步安装并配置对应版本的 pip 与 setuptools 工具,省去后续手动拉取 get-pip.py 脚本的繁琐步骤。
# 5. 执行编译前配置(启用 PGO 性能优化与 pip 支持)
./configure --enable-optimizations --with-ensurepip=install
编译时长提醒

由于 --enable-optimizations 会在编译过程中自动运行数百项单元测试以提取性能样本,整个编译周期会比常规编译明显延长(在 2 核 4G 配置的云服务器上通常需要 10 至 20 分钟)。如果仅是临时测试或机器性能较为有限,可以移除该参数直接执行 ./configure --with-ensurepip=install。

四、多核编译与安全安装(make altinstall)

configure 脚本顺利生成 Makefile 后,即可调用 make 启动编译。为了充分利用现代 CPU 的多核心计算资源,可以使用 -j $(nproc) 自动识别当前系统的可用核心数并开启并行编译:

# 6. 利用全部 CPU 核心并行编译源码
make -j $(nproc)

编译完成后,进入最为关键的安装步骤。在执行安装命令时,必须使用 make altinstall,绝对不能执行 make install。

Ubuntu源码编译安装Python 3.8详细步骤

图3:make install 与 make altinstall 安装机制安全影响对比

# 7. 以管理员权限执行安全安装
sudo make altinstall

安装命令执行完毕后,所有编译产物将写入 /usr/local/ 标准目录下:

  • 可执行文件:/usr/local/bin/python3.8、/usr/local/bin/pip3.8
  • 标准库与模块目录:/usr/local/lib/python3.8/
  • C 扩展头文件:/usr/local/include/python3.8/

五、安装后验证与核心模块检测

安装完成后,不要立即进入业务开发,而应先对新安装的解释器版本、扩展模块完整性以及包管理工具进行逐项核实。

1. 检查版本与执行路径

# 检查 python3.8 命令版本
python3.8 --version
# 预期输出示例:
# Python 3.8.18

# 检查当前系统默认的 python3 是否未受影响
python3 --version
# 预期输出示例(以 Ubuntu 22.04 为例):
# Python 3.10.12

# 检查对应 pip 版本与安装路径
pip3.8 --version
# 预期输出示例:
# pip 23.0.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)

2. 验证核心 C 扩展模块是否正常

通过一行命令直接测试 ssl、ctypes、sqlite3 和 zlib 四个最为关键的扩展包:

python3.8 -c "import ssl, ctypes, sqlite3, zlib; print('所有核心依赖模块检测正常!')"

若终端输出 所有核心依赖模块检测正常! 且没有任何报错提示,证明编译时依赖库链接完全成功。

六、生产环境最佳实践:创建并使用独立虚拟环境

在 Python 3.8 安装完成后,强烈建议不要直接使用 sudo pip3.8 install 向系统全局库目录写入第三方扩展包。直接污染 /usr/local/lib/python3.8/site-packages 会增加后续依赖冲突排查的难度。最佳实践是使用 Python 3.8 内置的 venv 模块为每个具体项目创建相互隔离的虚拟运行环境:

# 1. 切换至您的项目工作目录
cd /home/ubuntu/projects

# 2. 基于 Python 3.8 创建名为 py38_env 的虚拟环境
python3.8 -m venv py38_env

# 3. 激活当前虚拟环境
source py38_env/bin/activate

# 4. 激活后,命令行前端会出现 (py38_env) 标识
# 此时直接运行 python 与 pip 即天然指向该虚拟环境内的 Python 3.8
(py38_env) python -V
# 输出:Python 3.8.18

(py38_env) pip install --upgrade pip

# 5. 完成工作后退出虚拟环境
(py38_env) deactivate
Ubuntu源码编译安装Python 3.8详细步骤

图4:Ubuntu 系统多层 Python 隔离部署架构全景图

七、编译常见问题排查与修复方案

1. 缺少 libssl-dev 导致 pip 报错 HTTPS 不可用

报错现象:执行 pip3.8 install 时提示:

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/...: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available.

原因与解决:编译时未提前安装 libssl-dev 开发包,导致 Python 无法生成 _ssl.so 扩展。解决方案为重新补充安装依赖,并返回 Python 源码目录重新配置和安装:

# 补充安装 OpenSSL 开发库
sudo apt install -y libssl-dev

# 返回源码解压目录,重新配置与安装
cd /usr/src/Python-3.8.18
./configure --enable-optimizations --with-ensurepip=install
make -j $(nproc)
sudo make altinstall

2. 导入第三方库提示 No module named '_ctypes'

报错现象:导入部分需要调用本地 C 动态库的包时报错 ModuleNotFoundError: No module named '_ctypes'。

原因与解决:系统中缺失 libffi-dev。运行 sudo apt install -y libffi-dev 后,重新在源码目录下执行 make -j $(nproc) && sudo make altinstall 即可自动构建并生成 _ctypes.so。

3. 小型云主机编译时内存溢出进程被杀 (Killed)

报错现象:执行 make -j $(nproc) 过程中,终端突然输出 gcc: fatal error: Killed signal terminated program cc1。

原因与解决:在 1 核 1GB 或 2GB 内存的小型服务器上,多核并行编译且开启 PGO 优化时内存消耗极大,触发了 Linux 内核的 OOM Killer(内存溢出终止机制)。解决方法为:临时添加 2GB 的虚拟交换内存(Swap),或者降低编译并行度为单线程编译:

# 单线程编译,显著降低内存峰值占用
make -j 1
sudo make altinstall

八、步骤完整清单小结

最后,将全流程的核心操作命令整合为便于执行的脚本清单,方便查阅与快速部署:

# === 1. 安装编译工具链与必须的 C 扩展依赖 ===
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 \
    wget libbz2-dev liblzma-dev

# === 2. 下载并解压 Python 3.8 官方源码 ===
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz
sudo tar -xf Python-3.8.18.tgz
cd Python-3.8.18

# === 3. 运行配置脚本(启用优化与 pip) ===
./configure --enable-optimizations --with-ensurepip=install

# === 4. 并行编译源码 ===
make -j $(nproc)

# === 5. 安全安装(务必使用 altinstall) ===
sudo make altinstall

# === 6. 验证环境 ===
python3.8 --version
pip3.8 --version
python3.8 -c "import ssl, ctypes; print('环境准备就绪!')"

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表