pyenv + openssl 1.1 编译成功

明白了,你前面的尝试都显示 _ssl 模块没编译成功,而且你用本地编译 OpenSSL 1.1 还是失败了。CentOS 7 系统环境对 Python 3.10 支持不好,因为系统 OpenSSL 只有 1.0.x,而 Python 3.10 编译时必须有 1.1+ 的 OpenSSL。结合你手动编译 OpenSSL 失败的情况,最稳妥的做法是:


方案:用 pyenv + openssl 1.1 编译成功的步骤(最完整)

  1. 删除之前的 Python 3.10 安装
pyenv uninstall -f 3.10.0
  1. 下载并安装 OpenSSL 到用户目录

假设你已经下载了 openssl-1.1.1u.tar.gz

sudo mkdir -p /usr/local/src
sudo mv ~/openssl-1.1.1u.tar.gz /usr/local/src/
cd /usr/local/src
sudo tar -xf openssl-1.1.1u.tar.gz
cd openssl-1.1.1u

# 编译安装到 /usr/local/openssl-1.1
sudo ./config --prefix=/usr/local/openssl-1.1 --openssldir=/usr/local/openssl-1.1 shared
sudo make -j$(nproc)
sudo make install

⚠️ 注意 --prefix--openssldir 都指向同一个目录,并且要加 shared,保证生成 .so 动态库。不要用 $HOME,避免权限问题

  1. 设置环境变量
export PATH="/usr/local/openssl-1.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/openssl-1.1/lib:$LD_LIBRARY_PATH"
export LDFLAGS="-L/usr/local/openssl-1.1/lib"
export CPPFLAGS="-I/usr/local/openssl-1.1/include"
export PKG_CONFIG_PATH="/usr/local/openssl-1.1/lib/pkgconfig"
  1. 使用 pyenv 安装 Python 3.10
PYTHON_CONFIGURE_OPTS="--with-openssl=/usr/local/openssl-1.1" pyenv install 3.10.0
  1. 验证 ssl 是否可用
pyenv shell 3.10.0
python -c "import ssl; print(ssl.OPENSSL_VERSION)"

如果显示 OpenSSL 1.1.1u,就说明成功了。

  1. 创建 virtualenv
pyenv virtualenv 3.10.0 data-platform-env
pyenv activate data-platform-env
python -V
pip install -r requirements.txt

💡 关键点总结

  • OpenSSL 必须是 1.1+,并且编译时加 shared
  • 环境变量 PATHLDFLAGSCPPFLAGSPKG_CONFIG_PATHLD_LIBRARY_PATH 必须同时生效。
  • PYTHON_CONFIGURE_OPTS 必须指向你的 OpenSSL 安装路径。
  • CentOS 7 的系统 OpenSSL 太旧,默认不支持 Python 3.10 的 _ssl 模块编译。

如果你愿意,我可以直接给你写一个 从零开始的完整 shell 命令脚本,保证在 CentOS 7 上 pyenv 编译 Python 3.10 并支持 SSL,一条命令就搞定。

你希望我写吗?

Scroll to Top