CentOS 7 下源码编译安装 Python 3.8.9(集成 OpenSSL 1.1.1)


一、环境准备与清理

首先清理可能残留的编译文件,并安装必要的编译工具和依赖库。

# 清理旧的编译产物
make distclean
rm -rf build
find . -name "*.pyc" -delete

# 安装基础编译工具和依赖
yum install -y \
gcc gcc-c++ make \
openssl-devel \
sqlite-devel \
libffi-devel \
zlib-devel \
bzip2-devel \
readline-devel \
xz-devel

说明xz-devel 用于提供 LZMA 压缩支持,openssl-devel 是系统自带的 OpenSSL 开发包(版本较旧),后续会编译安装新版 OpenSSL。


二、更换 YUM 源(可选)

为了加快依赖包下载速度,建议将默认源更换为阿里云镜像。

mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

三、安装编译 Python 所需依赖

在更换源后,再次安装完整依赖(确保所有库都已就绪):

yum install -y gcc gcc-c++ make wget bzip2 bzip2-devel zlib-devel \
readline-devel sqlite-devel libffi-devel xz-devel bzip2-devel \
openssl-devel

四、编译安装 OpenSSL 1.1.1

CentOS 7 系统自带的 OpenSSL 版本为 1.0.2,无法满足 Python 3.8 对 TLS 1.3 等特性的支持。因此需要手动编译新版 OpenSSL。

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

# 配置安装路径
./config --prefix=/usr/local/openssl-1.1.1 --openssldir=/usr/local/openssl-1.1.1

# 编译并安装(使用所有 CPU 核心加速)
make -j$(nproc)
make install

提示:如果编译过程中出现错误,可以尝试 make -j1 单线程编译以排查问题。


五、下载并编译 Python 3.8.9

1. 下载 Python 源码

cd /usr/local/src
wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz
tar xf Python-3.8.9.tgz
cd Python-3.8.9

2. 配置编译参数

使用 --with-openssl 指定新编译的 OpenSSL 路径,并启用优化:

./configure \
--prefix=/usr/local/python3.8_ssl111 \
--with-openssl=/usr/local/openssl-1.1.1 \
--with-openssl-rpath=auto \
--enable-optimizations

参数说明

  • --prefix:Python 安装路径。
  • --with-openssl:指定 OpenSSL 的安装前缀,Python 编译时会去该路径查找头文件和库文件。
  • --with-openssl-rpath=auto:自动将 OpenSSL 的库路径写入 Python 可执行文件的 RPATH,避免运行时找不到动态库。
  • --enable-optimizations:启用 PGO(Profile Guided Optimization)优化,提升 Python 运行性能,但会显著增加编译时间。

注意:如果服务器性能较弱或编译过程中出现奇怪错误,可以去掉 --enable-optimizations,改用以下简化配置:

./configure \
--prefix=/usr/local/python3.8_ssl111 \
--with-openssl=/usr/local/openssl-1.1.1 \
--with-openssl-rpath=auto

3. 编译并安装

make -j$(nproc)
make install

若编译失败,可尝试单线程:make -j1 && make install


六、验证 Python 功能

编译完成后,测试 Python 是否能正确加载 OpenSSL 和 LZMA 模块:

/usr/local/python3.8_ssl111/bin/python3.8 -c "import ssl, lzma; print(ssl.OPENSSL_VERSION); print(lzma.LZMAFile)"

预期输出中会显示 OpenSSL 1.1.1w 的版本信息,且不会报 LZMA 相关错误。


七、创建虚拟环境

使用新编译的 Python 创建虚拟环境,隔离项目依赖。

/usr/local/python3.8_ssl111/bin/python3.8 -m venv qmp_venv3

激活虚拟环境:

source /qmp_code3/qmp_venv3/bin/activate

提示:虚拟环境路径可根据实际需求修改。


八、更新 pip 并安装项目依赖

激活虚拟环境后,升级 pip 并使用国内镜像源安装依赖。

pip install --upgrade pip
pip install --index-url=https://mirrors.aliyun.com/pypi/simple -r requirements.txt

九、最终验证

在虚拟环境中再次验证关键库的导入:

python -c "import ssl, lzma, requests; print(ssl.OPENSSL_VERSION); import urllib3; print(urllib3.__version__)"

若能正常输出 OpenSSL 版本和 urllib3 版本,说明 Python 环境搭建成功。


十、附:pip 使用其他镜像源

若需临时使用清华源安装单个包:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

posted @ 2026-09-08 18:53  BeginnerY  阅读(4)  评论(0)    收藏  举报