CentOS7.9 源码编译安装 Python3.11.9 完整文档

 

背景说明

CentOS 7.9 系统自带 Python3 版本为 3.6.x,很多新项目不再兼容 Python3.6,需要手动编译安装 Python 3.11.9。

方案选型:源码编译安装,优点:版本可控、和开发环境保持一致;使用 make altinstall,不会覆盖系统自带的 python(系统 yum 依赖旧 python,不能直接替换)。

前置依赖说明

CentOS7 默认 openssl 版本过低,Python3.11 编译时 ssl 模块会编译失败,所以需要单独安装 openssl11 和开发库。

前提:前面已经修复 yum 源(阿里云 vault centos7 源 + epel 源),yum 可以正常安装软件包。

完整操作步骤(root 执行)

1. 安装编译依赖与 openssl11

yum install -y openssl11 openssl11-devel

 

 

image

 

openssl11 来自 epel 源,epel 源要提前配置好,否则找不到包。

2. 下载 Python3.11.9 源码包

cd /opt
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz
tar -xf Python-3.11.9.tar.xz
cd Python-3.11.9

 

image

 

image

 


3. 设置 openssl11 头文件、库文件环境变量

告诉编译器使用新版 openssl11,避免编译后 ssl 模块缺失:

export CFLAGS="-I/usr/include/openssl11"
export LDFLAGS="-L/usr/lib64/openssl11"

image

 



4. configure 编译配置

./configure --prefix=/usr/local/python3.11 \
    --enable-optimizations \
    --with-ensurepip=install

image

 

参数解释:

  • --prefix=/usr/local/python3.11:指定安装目录,隔离系统 python
  • --enable-optimizations:开启性能优化
  • --with-ensurepip=install:编译完成自带 pip

5. 编译 & 安装

make -j$(nproc)
make altinstall

 

⚠️ 重点:必须用 altinstall,不要 make install make install 会覆盖系统 python3 软链接,破坏 yum 工具!altinstall 只会生成 python3.11,不会覆盖系统自带的 python3。

6. 创建全局软链接

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

 


7. 配置全局环境变量(永久生效)

cat > /etc/profile.d/python311.sh <<'EOF'
export PATH=/usr/local/python3.11/bin:$PATH
export PYTHONDONTWRITEBYTECODE=1
export PIP_DISABLE_PIP_VERSION_CHECK=1
EOF
source /etc/profile.d/python311.sh

 

变量说明:

  • PATH:优先使用新 python3.11 的 bin 目录
  • PYTHONDONTWRITEBYTECODE=1:不生成 pyc 字节码文件
  • PIP_DISABLE_PIP_VERSION_CHECK=1:关闭 pip 版本检查,减少输出

8. 验证安装结果

python3.11 --version
pip3.11 --version

 

成功输出:

Python 3.11.9
pip 24.0 from /usr/local/python3.11/lib/python3.11/site-packages/pip (python 3.11)

 

测试 ssl 模块是否正常(非常关键)

很多人编译完 python,但是 ssl 模块缺失,pip 无法访问 https 源,一定要验证:

python3.11 -c "import ssl; print(ssl.OPENSSL_VERSION)"

 

正常会打印 openssl 版本号;如果报 ModuleNotFoundError: No module named 'ssl',说明 openssl 编译参数没生效,需要重新 configure 编译。

使用说明

  • 系统自带旧版本:python3(3.6),不要改动,yum 依赖它
  • 新项目使用:python3.11 / pip3.11
  • 虚拟环境创建示例:python3.11 -m venv /opt/myenv

常见坑点

  1. epel 源没装好 → yum install openssl11 找不到包(需要前面的 yum 源修复文档)
  2. 忘记设置 CFLAGS / LDFLAGS → ssl 模块编译失败,pip 无法拉取包
  3. 使用 make install → 系统 python 被覆盖,yum 直接报错无法使用
  4. 编译内存不足:make -j$(nproc) 多核编译,小内存机器(1G)建议改为 make 单线程编译

 

posted @ 2026-09-24 17:09  程序员食堂  阅读(24)  评论(0)    收藏  举报