CentOS 7 上源码编译安装 Python 3.13 + pip 使用实战(含 OpenSSL 踩坑解决)

在企业/离线环境中,我们常常不能直接使用官方包管理器获取最新版 Python,这时从源码安装就是必选方案。本篇文章记录了我在 CentOS 7 上成功编译安装 Python 3.13 的全过程,并详细列出遇到的问题及应对策略。


📌 环境准备

  • 系统版本:CentOS 7
  • Python 目标版本:3.13.0(源码安装)
  • Docker 环境配置(用于调试镜像构建)

一、安装必要依赖

1.1 安装开发工具和依赖包

sudo yum groupinstall "Development Tools" -y
sudo yum install -y gcc gcc-c++ make wget zlib-devel bzip2 bzip2-devel \
readline-devel sqlite sqlite-devel openssl-devel xz xz-devel \
libffi-devel ncurses-devel gdbm-devel tk-devel \
curl git

二、安装 devtoolset-11(GCC 11)

2.1 配置 SCL 源(阿里云)

sudo curl -o /etc/yum.repos.d/Centos-SCLo-rh.repo http://mirrors.aliyun.com/repo/Centos-7-sclo-rh.repo
sudo curl -o /etc/yum.repos.d/Centos-SCLo-scl.repo http://mirrors.aliyun.com/repo/Centos-7-sclo-scl.repo

2.2 安装 devtoolset-11

sudo rpm --import https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-SCLo
sudo yum install -y devtoolset-11

2.3 启用 gcc-11 环境

scl enable devtoolset-11 bash

⚠️ 注意:不要漏了这一步!你后续编译 Python 就是基于这个 GCC 11。


三、编译安装 OpenSSL(1.1.1)

Python 3.13 不再支持系统内置的旧 OpenSSL,需要自己编译新版。

3.1 下载和编译

cd /opt
wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz
tar -zxvf openssl-1.1.1u.tar.gz
cd openssl-1.1.1u
./config --prefix=/opt/openssl-1.1.1u
make -j$(nproc)
make install

四、编译安装 Python 3.13

4.1 下载源码并解压

cd /usr/src
wget https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz
tar zxvf Python-3.13.0.tgz
cd Python-3.13.0

4.2 配置编译参数(指定 OpenSSL)

./configure --prefix=/usr/local/python3.13 \
--with-openssl=/opt/openssl-1.1.1u \
--enable-optimizations

4.3 编译与安装

make -j$(nproc)
make install

五、配置 Python 环境变量

ln -sf /usr/local/python3.13/bin/python3 /usr/bin/python3.13
ln -sf /usr/local/python3.13/bin/pip3 /usr/bin/pip3.13

验证版本:

python3.13 -V
pip3.13 -V

六、⚠️ 踩坑合集:SSL 模块无法导入

❌ 错误现象:

import ssl
ModuleNotFoundError: No module named '_ssl'

✅ 解决方法:

  1. 确保 LD_LIBRARY_PATH 设置正确:
export LD_LIBRARY_PATH=/opt/openssl-1.1.1u/lib:$LD_LIBRARY_PATH
  1. 确保 Python 是在配置了 --with-openssl 参数之后重新编译的。
  2. 查看 _ssl.so 是否生成:
find /usr/local/python3.13 -name "_ssl*.so"

如果没有这个文件,说明你要重新编译,并清理旧目录:

make clean
./configure ...
make -j$(nproc)
make install

七、📦 使用 pip 安装依赖包(离线可用)

7.1 从 Windows 上生成 requirements.txt:

pip freeze > requirements.txt

将文件拷贝至 Linux 服务器。

7.2 在线安装所有依赖:

pip3.13 install -r requirements.txt

发表回复