Linux(Ubuntu/CentOS)源码编译安装Python 3.8教程

山海之间
山海之间
发布时间:2026-10-22 | 3人浏览过
原创

在 Linux 服务器与开发环境中,很多老旧发行版自带的 Python 版本较低,或者部分特定工程依赖 Python 3.8 的稳定特性。通过源码编译安装 Python 3.8,能够在不破坏系统原有包管理器运行环境的前提下,为系统引入独立、干净的 Python 运行环境。本文将分别针对 Ubuntu(Debian 系)与 CentOS(RHEL 系)两大主流分支,详细拆解从环境依赖安装、源码配置构建,到使用 altinstall 隔离安装及常见报错排查的完整流程。

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

源码编译本质上是将 C 语言写就的 CPython 源码在当前机器上编译生成机器码执行文件。Python 的许多标准库模块(例如用于网络加密的 ssl、用于轻量数据库交互的 sqlite3、用于调用动态链接库的 ctypes 以及数据压缩的 zlib 等)并不是纯 Python 实现,而是依赖底层的 Linux 系统 C 开发库。如果在编译前未安装这些开发库,编译虽然可能顺利结束,但运行时会导致关键模块缺失,直接引发 No module named '_ssl' 等严重问题。

Linux(Ubuntu/CentOS)源码编译安装Python 3.8教程
图 1:Ubuntu 与 CentOS 编译依赖与对应 Python 内置模块关系表

1.1 Ubuntu / Debian 系统安装依赖命令

在 Ubuntu 18.04、20.04 或 22.04 等机器上,先刷新本地软件源索引,随后安装构建套件和开发包:

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 wget curl

1.2 CentOS / RHEL 系统安装依赖命令

在 CentOS 7 或 CentOS 8 上,使用 yum 安装组包工具“Development Tools”以及各个扩展头文件:

sudo yum update -y
sudo yum groupinstall -y "Development Tools"
sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel \
    sqlite-devel readline-devel tk-devel gdbm-devel db4-devel \
    libpcap-devel xz-devel libffi-devel wget
提示:如果是在极小化安装(Minimal Install)的 CentOS 虚拟机中,请确保已安装 wget 和 tar,便于后续下载与解包操作。

二、获取 Python 3.8 官方源码与编译步骤

源码安装包括四个核心阶段:下载并解压源码归档包、执行环境探测与 Makefile 配置、启动多核编译、以及执行隔离安装。

Linux(Ubuntu/CentOS)源码编译安装Python 3.8教程
图 2:从源码包解压到完成隔离部署的核心四阶段

2.1 下载源码归档

建议前往 /usr/src 或用户的临时构建目录(例如 /tmp)下进行操作。这里以 Python 3.8.18(3.8 系列最终修复版本之一)为例:

cd /usr/src
sudo wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz
sudo tar -xzf Python-3.8.18.tgz
cd Python-3.8.18

如果服务器处于国内网络环境且连接 Python 官方源速度较慢,可以使用华为云或淘宝镜像站进行下载替代:

sudo wget https://mirrors.huaweicloud.com/python/3.8.18/Python-3.8.18.tgz

2.2 运行配置脚本:configure

在解压后的源码目录中,运行 ./configure 检查当前系统环境,生成对应的构建配置。推荐加上 --enable-optimizations 参数:

sudo ./configure --enable-optimizations

参数解释:

  • --enable-optimizations:启用 Profile Guided Optimization(PGO 基于性能剖析的优化)。该选项会运行一系列基准测试并根据运行状态优化最终二进制文件,使生成的 Python 运行效率提升约 10% 到 20%。唯一的代价是让后续的 make 编译耗时延长一倍左右。
  • 如果对安装路径有特殊要求,可额外指定 --prefix=/your/custom/path;默认安装前缀为 /usr/local,生成的二进制文件将位于 /usr/local/bin。

三、编译与安全安装:为什么必须使用 make altinstall

配置完成后,即可执行编译指令。通过 nproc 命令获取系统的 CPU 逻辑核心数,开启多任务并发编译:

# 查看 CPU 核心数并启动多核并行编译
sudo make -j $(nproc)

完成编译后,执行最终的文件安装。务必注意,安装命令必须是 make altinstall,严禁执行 make install!

sudo make altinstall
Linux(Ubuntu/CentOS)源码编译安装Python 3.8教程
图 3:make install 与 make altinstall 的系统底层安全差异对比

Linux 操作系统的底层架构高度依赖 Python。例如 CentOS 中的 yum、dnf,以及 Ubuntu 里的诸多管理脚本,都是使用 /usr/bin/python3 运行并调用系统特定的 Python 库。如果使用 make install,构建系统会默认生成 /usr/local/bin/python3。当普通用户或 root 执行 python3 时,PATH 变量通常优先命中 /usr/local/bin,这会导致系统工具因为加载了新安装但缺少底层发行版特定补丁的 Python 解释器而报错崩溃。而 make altinstall 严格跳过创建符号链接 python3,只产生具体的 python3.8,从而保证了两者绝对安全共存。

四、验证安装结果与虚拟环境创建

安装完成后,按以下步骤确认 Python 3.8 及配套 pip 是否正常可用:

4.1 版本校验

# 检查可执行文件绝对路径及版本
which python3.8
# 示例输出:/usr/local/bin/python3.8

python3.8 --version
# 示例输出:Python 3.8.18

pip3.8 --version
# 示例输出:pip 23.0.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)

4.2 核心模块导入测试

必须验证加密、数据库与 C 语言外部函数交互模块是否完整编译内置:

python3.8 -c "import ssl; print('SSL 版本:', ssl.OPENSSL_VERSION)"
python3.8 -c "import sqlite3; print('SQLite3 支持正常')"
python3.8 -c "import _ctypes; print('ctypes 支持正常')"

如果上述三条单行测试均输出成功信息,证明此二进制版本已完整具备生产运行所需的核心组件。

4.3 独立虚拟环境的正确使用姿势

不要直接使用 sudo pip3.8 install 把第三方库全局安装到系统路径下,推荐通过标准库自带的 venv 创建项目专用的隔离沙箱:

# 创建隔离虚拟环境
python3.8 -m venv my_project_env

# 激活虚拟环境
source my_project_env/bin/activate

# 此时控制台前缀将出现 (my_project_env),直接使用 python 与 pip 即可
(my_project_env) $ python --version
Python 3.8.18
(my_project_env) $ pip install --upgrade pip

五、常见编译报错与排查决策

在实际编译过程中,由于宿主机的系统环境差异或资源限制,可能会遇到以下几类典型问题:

Linux(Ubuntu/CentOS)源码编译安装Python 3.8教程
图 4:Python 3.8 编译安装速查与排错决策树总结

5.1 编译时报错:Killed 或卡在某个测试环节不动

原因:启用 --enable-optimizations 并加上 -j 多核并行编译时,GCC 会消耗大量 RAM。如果服务器内存小于 2GB(例如 1 核 1G 的轻量云服务器),极易触发系统 OOM Killer 强行杀掉编译器进程。

解决方式:为系统分配临时 Swap(交换分区),或者降低并发线程数改为单核编译:

# 临时创建并启用 2GB Swap 分区
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 随后使用单线程或双线程重新编译
sudo make -j 1
sudo make altinstall

5.2 运行时报错:ModuleNotFoundError: No module named '_ssl'

原因:在执行 ./configure 时,系统未检测到 OpenSSL 库的头文件。

解决方式:在 Ubuntu 下安装 libssl-dev,在 CentOS 下安装 openssl-devel,随后必须回到源码根目录重新执行一遍配置与编译安装:

# 重新配置并编译安装
cd /usr/src/Python-3.8.18
sudo ./configure --enable-optimizations
sudo make -j $(nproc)
sudo make altinstall

5.3 运行时报错:ModuleNotFoundError: No module named '_ctypes'

原因:缺少 libffi 及其开发头文件,导致 Python 3.8 无法编译 _ctypes 动态库。

解决方式:安装 libffi-dev(Ubuntu)或 libffi-devel(CentOS),补全依赖后重新编译即可。

六、全流程关键命令速查

步骤 Ubuntu (Debian) CentOS (RHEL)
1. 依赖安装 sudo apt update && sudo apt install -y build-essential libssl-dev libffi-dev zlib1g-dev sudo yum groupinstall -y "Development Tools" && sudo yum install -y openssl-devel libffi-devel zlib-devel
2. 获取源码 wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz && tar -xf Python-3.8.18.tgz
3. 优化配置 cd Python-3.8.18 && ./configure --enable-optimizations
4. 编译与安装 make -j $(nproc) && sudo make altinstall
5. 验证命令 python3.8 --version && python3.8 -c "import ssl"

通过遵循上述规范,无论在 Ubuntu 还是 CentOS 环境中,都可以高效编译出稳定高效的 Python 3.8 运行环境,同时确保宿主机的系统管理套件安然无恙。

本站声明

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

Python 相关产品和应用

全部下载

专题列表