You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境下升级Python3.10与OpenSSL1.1.1t后PyMongo哈希算法报错及SSL模块不可用问题求助

CentOS环境下升级Python3.10与OpenSSL1.1.1t后PyMongo哈希算法报错及SSL模块不可用问题求助

我完全理解你现在的困惑——升级Python和OpenSSL后碰到这种两难的问题确实头疼,一边是PyMongo调用pbkdf2_hmac时抛出ValueError: unsupported hash type sha256的错误,另一边是不关联OpenSSL编译的话,SSL模块又没法正常使用,两头卡壳太闹心了。下面我来帮你梳理问题原因并给出针对性的解决方案:

问题根源分析

你的两次编译遇到的问题本质是Python与OpenSSL的编译关联出现了异常:

  • 第一次编译Python时虽然关联了自己编译的OpenSSL1.1.1t,但可能编译过程中Python没有正确识别到OpenSSL提供的哈希算法库,导致sha256等算法无法被调用,进而触发PyMongo的报错。
  • 第二次编译跳过了OpenSSL关联,Python默认使用了系统自带的旧版SSL依赖,虽然哈希算法功能恢复,但缺失了新版OpenSSL的支持,所以SSL模块无法正常加载。

具体解决步骤

1. 重新编译安装OpenSSL1.1.1t(确保编译正确)

首先清理之前可能安装不完整的OpenSSL,然后重新编译:

# 安装编译依赖
yum install -y gcc make zlib-devel

# 下载并解压OpenSSL1.1.1t源码(如果还没下载)
wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz
tar -zxf openssl-1.1.1t.tar.gz
cd openssl-1.1.1t

# 配置编译参数,指定自定义安装路径(避免覆盖系统默认OpenSSL)
./config --prefix=/usr/local/openssl-1.1.1t --openssldir=/usr/local/openssl-1.1.1t shared zlib

# 编译并安装
make -j$(nproc)
make install

2. 正确编译Python3.10并关联新版OpenSSL

编译Python前,必须通过环境变量让Python找到新版OpenSSL的头文件和库文件:

# 设置环境变量,指向刚安装的OpenSSL路径
export LD_LIBRARY_PATH=/usr/local/openssl-1.1.1t/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I/usr/local/openssl-1.1.1t/include"
export LDFLAGS="-L/usr/local/openssl-1.1.1t/lib"

# 进入Python3.10源码目录,先清理旧编译缓存
cd python-3.10.x
make clean

# 配置Python编译选项,明确指定关联的OpenSSL路径
./configure --prefix=/usr/local/python3.10 --with-openssl=/usr/local/openssl-1.1.1t --enable-shared

# 编译并安装
make -j$(nproc)
make install

3. 验证安装结果

安装完成后,验证两个核心功能是否正常:

  • 测试SSL模块:
    /usr/local/python3.10/bin/python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
    
    如果输出OpenSSL 1.1.1t ...,说明SSL模块已正确关联新版OpenSSL。
  • 测试哈希算法:
    import hmac
    import hashlib
    # 测试hmac的SHA256
    print(hmac.new("AAA".encode('utf-8'), "BBB".encode('utf-8'),'SHA256').hexdigest())
    # 测试pbkdf2_hmac的sha256
    print(hashlib.pbkdf2_hmac('sha256', b'test_data', b'test_salt', 1000))
    
    如果没有报错,说明哈希算法功能正常,此时再测试PyMongo连接,应该就能解决之前的报错了。

额外注意事项

  • 不要轻易替换CentOS系统默认的OpenSSL,用自定义路径安装并通过环境变量让Python调用即可,避免破坏系统其他依赖组件。
  • 如果编译Python时出现“Could not find OpenSSL headers”的警告,检查CPPFLAGS和LDFLAGS是否正确指向了OpenSSL的安装路径,或者是否遗漏了zlib-devel依赖。
  • 若后续系统环境变量有问题,可以将LD_LIBRARY_PATH的配置添加到/etc/profile或用户的~/.bashrc中,确保每次登录都能生效。

备注:内容来源于stack exchange,提问作者Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:52:36