CentOS7 + pyenv 安装 Python 3.11 完整指南
适用环境:
- 系统:CentOS Linux 7.9.2009
- 架构:x86_64
- Shell:zsh
- 权限:root
- pyenv:已安装(2.6.27)
- OpenSSL:1.0.2k(默认版本过旧,需要处理)
一、为什么 CentOS7 安装 Python3.11 会失败
CentOS7 默认 OpenSSL 为:
bash
OpenSSL 1.0.2k-fips
但 Python 3.11 推荐使用:
- OpenSSL 1.1.1+
否则容易出现:
- ssl 模块缺失
- pip 无法使用 HTTPS
_ssl module not available- pyenv install 编译失败
所以必须先升级 OpenSSL 环境。
二、安装编译依赖
先安装所有必要依赖:
bash
yum groupinstall -y "Development Tools"
yum install -y \
gcc \
gcc-c++ \
make \
zlib-devel \
bzip2-devel \
readline-devel \
sqlite-devel \
libffi-devel \
xz-devel \
tk-devel \
gdbm-devel \
ncurses-devel \
libuuid-devel \
wget \
curl \
git
三、安装新版 OpenSSL(推荐 OpenSSL 1.1.1)
建议不要替换系统 OpenSSL。
直接安装到独立目录即可。
1)进入源码目录
bash
cd /usr/local/src
2)下载 OpenSSL
bash
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
3)解压
bash
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
4)编译安装
bash
./config \
--prefix=/usr/local/openssl-1.1.1 \
--openssldir=/usr/local/openssl-1.1.1
make -j$(nproc)
make install
5)确认安装成功
bash
/usr/local/openssl-1.1.1/bin/openssl version
应该看到:
bash
OpenSSL 1.1.1w
四、配置 pyenv 使用新版 OpenSSL
这一步非常关键。
否则 pyenv 编译 Python 3.11 时仍会使用系统旧 OpenSSL。
编辑 zsh 配置:
bash
vim ~/.zshrc
追加:
bash
export CPPFLAGS="-I/usr/local/openssl-1.1.1/include"
export LDFLAGS="-L/usr/local/openssl-1.1.1/lib"
export PKG_CONFIG_PATH="/usr/local/openssl-1.1.1/lib/pkgconfig"
export LD_LIBRARY_PATH="/usr/local/openssl-1.1.1/lib"
export PATH="/usr/local/openssl-1.1.1/bin:$PATH"
刷新环境:
bash
source ~/.zshrc
五、注册 OpenSSL 动态库(CentOS7 必做)
CentOS7 上仅设置环境变量还不够。
必须把 OpenSSL 1.1.1 的动态库注册到系统链接器。
执行:
bash
echo "/usr/local/openssl-1.1.1/lib" > /etc/ld.so.conf.d/openssl-1.1.1.conf
ldconfig
验证:
bash
ldconfig -p | grep ssl
应该能看到:
bash
/usr/local/openssl-1.1.1/lib/libssl.so.1.1
否则 Python 编译时容易出现:
bash
ModuleNotFoundError: No module named '_ssl'
六、安装 Python 3.11
查看可安装版本:
bash
pyenv install --list | grep 3.11
建议安装稳定版:
bash
pyenv uninstall -f 3.11.9
export PYTHON_CONFIGURE_OPTS="--with-openssl=/usr/local/openssl-1.1.1"
MAKE_OPTS="-j2" pyenv install -v 3.11.9
说明:
--with-openssl:强制 Python 使用 OpenSSL 1.1.1-j2:适合 2 CPU 服务器-v:显示详细编译日志,方便排查问题
编译时间:
- 普通服务器:5~20 分钟
- 云服务器:10~30 分钟
七、设置 Python3.11 为默认版本
查看可安装版本:
bash
pyenv install --list | grep 3.11
建议安装稳定版:
bash
pyenv install 3.11.9
如果你机器 CPU 较高:
bash
MAKE_OPTS="-j8" pyenv install 3.11.9
编译时间:
- 普通服务器:5~20 分钟
- 云服务器:10~30 分钟
六、设置 Python3.11 为默认版本
全局设置:
bash
pyenv global 3.11.9
检查:
bash
python --version
python3 --version
应该输出:
bash
Python 3.11.9
七、验证 SSL 是否正常
非常重要。
执行:
bash
python
进入 Python 后:
python
import ssl
print(ssl.OPENSSL_VERSION)
正确结果应该类似:
python
OpenSSL 1.1.1w
如果这里仍然显示 1.0.2k 或报错:
说明 pyenv 编译时仍用了系统 OpenSSL。
八、安装 pip 与常用工具
升级 pip:
bash
pip install --upgrade pip setuptools wheel
验证:
bash
pip -V
九、推荐 pyenv 初始化(zsh)
编辑:
bash
vim ~/.zshrc
加入:
bash
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
刷新:
bash
source ~/.zshrc
十、常见报错
报错:
bash
ModuleNotFoundError: No module named '_ssl'
原因:
- OpenSSL 版本过低
- pyenv 编译时没指向新版 OpenSSL
解决:
删除重新安装:
bash
pyenv uninstall 3.11.9
pyenv install 3.11.9
报错:
bash
zipimport.ZipImportError
原因:
- 编译依赖不完整
重新安装依赖后重新编译。
报错:
bash
BUILD FAILED
查看日志:
bash
cat /tmp/python-build.*.log
最常见问题:
- openssl
- zlib
- gcc 版本
十一、推荐安装方式(你当前环境)
你目前环境最稳的方案是:
- 保持系统 OpenSSL 不变
- 单独安装 OpenSSL 1.1.1
- pyenv 指向新 OpenSSL
- 安装 Python 3.11.9
这是 CentOS7 上最稳定的方案。
十二、推荐最终目录结构
bash
/usr/local/openssl-1.1.1
~/.pyenv
~/.pyenv/versions/3.11.9
十三、最终验证
执行:
bash
python --version
which python
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
pip -V
理想输出:
bash
Python 3.11.9
OpenSSL 1.1.1w
说明安装完成。