在企业/离线环境中,我们常常不能直接使用官方包管理器获取最新版 Python,这时从源码安装就是必选方案。本篇文章记录了我在 CentOS 7 上成功编译安装 Python 3.13 的全过程,并详细列出遇到的问题及应对策略。
📌 环境准备
- 系统版本:CentOS 7
- Python 目标版本:3.13.0(源码安装)
- GCC 工具链:devtoolset-11;python3编译必须
- OpenSSL 版本:1.1.1u(编译安装);pip包安装的时候必须
- 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-SCLosudo 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'
✅ 解决方法:
- 确保
LD_LIBRARY_PATH设置正确:
export LD_LIBRARY_PATH=/opt/openssl-1.1.1u/lib:$LD_LIBRARY_PATH
- 确保 Python 是在配置了
--with-openssl参数之后重新编译的。 - 查看
_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