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

Python内置OpenSSL版本过低无法更新,如何正确升级?

解决方法

问题本质说明

你当前遇到的版本差异是正常现象:Python标准库自带的ssl模块是Python编译时静态/动态绑定的openssl版本,和pip安装的第三方pyopenssl、cryptography包完全独立,第三方包自带或链接的高版本openssl不会修改标准库ssl模块的依赖版本,所以你执行import ssl打印的版本始终是编译Python时绑定的旧版本。


可选解决方法

方法1:重新编译Python(彻底解决标准库ssl版本问题)

这个方案可以直接让标准库ssl模块使用高版本openssl,无需修改业务代码:

  • 先安装系统新版openssl的开发依赖包:
    Debian/Ubuntu系执行:sudo apt install libssl-dev
    CentOS/RHEL系执行:sudo yum install openssl-devel
  • 下载你正在使用的Python对应版本源码(以3.8.6为例),解压后进入源码目录
  • 编译时指定openssl路径执行配置:
    ./configure --with-openssl=/usr --enable-optimizations
    
    如果你是自行编译安装的openssl到自定义路径,把/usr替换为你的openssl安装目录即可
  • 执行编译安装:make && sudo make altinstall(altinstall不会覆盖系统默认python命令,避免影响系统依赖)
  • 用新编译的Python二进制文件创建虚拟环境,此时再执行import ssl; print(ssl.OPENSSL_VERSION)就会显示新版openssl版本

方法2:业务代码改用pyopenssl替代标准库ssl(无需修改Python本身)

如果你不想重新编译Python,可以直接用你已经安装的高版本pyopenssl替代标准库的ssl模块,适配大部分业务场景:

  • 如果你的项目用requests做http请求,直接安装requests的security额外依赖即可自动适配:pip install 'requests[security]'
  • 如果是自定义代码使用ssl模块,可以在项目入口处添加注入代码,把标准库ssl替换为pyopenssl:
    # 注入pyopenssl替代标准库ssl
    from OpenSSL import SSL
    import sys
    sys.modules['ssl'] = SSL
    
    # 适配urllib3/requests的场景也可以用下面更稳妥的注入方式
    import urllib3.contrib.pyopenssl
    urllib3.contrib.pyopenssl.inject_into_urllib3()
    
    注入完成后,所有调用标准库ssl的逻辑都会自动使用pyopenssl绑定的高版本openssl。

方法3:使用conda安装Python(新手友好)

conda源提供的Python版本默认已经绑定了高版本openssl,无需自行编译:

  • 安装miniconda后,执行创建环境命令:conda create -n 你的环境名 python=3.8
  • 激活环境后直接使用,标准库ssl模块默认就是高版本openssl。

内容的提问来源于stack exchange,提问作者sky_glider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:15:02