urllib3 v2 only supports OpenSSL 1.1.1+ 解决办法

📅 2026/7/23 18:48:20
urllib3 v2 only supports OpenSSL 1.1.1+ 解决办法
问题本质冲突点urllib3v2 版本强制要求底层OpenSSL ≥ 1.1.1 Python 运行时ssl模块编译时链接的是LibreSSL 2.8.3。LibreSSL 与 OpenSSL两者是不同分支LibreSSL 旨在更轻量但版本号不与 OpenSSL 对齐urllib3v2 无法识别 LibreSSL 的兼容性因此发出警告注意这只是警告程序通常仍可运行但未来可能因功能缺失而报错。解决方案按推荐程度排序✅ 方案一降级urllib3至 v1.x最稳妥、无系统侵入如果您的项目不需要urllib3v2 的新特性如 HTTP/2 支持此方案最简单安全。pipinstallurllib32或指定具体版本如 1.26.18pipinstallurllib31.26.18验证降级后警告消失。此方案适用于大多数生产环境且不影响requests等依赖库的正常使用。⚠️ 方案二升级系统 OpenSSL / LibreSSL推荐给长期维护者若您需要保持urllib3v2则需让 Python 使用 OpenSSL 1.1.1。macOS (Homebrew)brew update brewinstallopenssl1.1# 或 openssl3brew unlink opensslbrewlink--forceopenssl1.1然后重新编译 Python使用pyenv更方便pyenvinstall3.10.0 --with-openssl$(brew--prefixopenssl)Debian/Ubuntusudoaptupdatesudoaptinstalllibssl1.1# 或 libssl3Ubuntu 20.04若系统默认仍是旧版可添加第三方源如ppa:ondrej/php含新版 OpenSSL但不推荐可能破坏系统依赖。CentOS/RHEL启用 EPEL 并安装openssl11sudoyuminstallepel-releasesudoyuminstallopenssl11 openssl11-devel同样需要重新编译 Python 并指定新库路径。注意升级系统级 SSL 库风险较高可能影响其他服务。建议在容器或虚拟环境中操作。 方案三使用pyOpenSSL垫片临时规避安装pyOpenSSL并注入到ssl模块中但官方并不推荐且可能引发其他兼容问题pipinstallpyOpenSSL在代码顶部添加importssltry:importpyopenssl ssl._create_default_https_contextssl._create_unverified_contextexceptImportError:pass但此方法不能真正消除警告仅能尝试绕过底层校验强烈不推荐用于生产。 方案四忽略警告仅用于临时测试若您确认当前功能无影响且短期内无法升级可在代码中屏蔽该警告importwarnings warnings.filterwarnings(ignore,categoryUserWarning,moduleurllib3)或设置环境变量在启动脚本前exportPYTHONWARNINGSignore:NotOpenSSLWarning此方法不解决本质问题后续升级或 SSL 连接异常时难以排查仅建议在调试阶段使用。补充建议环境隔离使用Docker镜像如python:3.10-slim基于 Debian 11自带 OpenSSL 1.1.1可彻底避免此问题。使用Conda管理环境Conda 会自行构建兼容的 OpenSSL 版本condainstallopenssl版本适配参考您的环境推荐方案临时项目 / 无法动系统降级urllib3方案一长期项目 / 可重构环境升级系统 SSL 重编译 Python方案二容器化部署更换基础镜像如alpine需安装libressl-dev但需测试兼容性测试阶段 / 快速验证忽略警告方案四验证修复执行以下命令确认当前urllib3版本及 SSL 后端python-cimport urllib3; print(urllib3.__version__); import ssl; print(ssl.OPENSSL_VERSION)若输出显示urllib3版本 2 或 OpenSSL 版本 ≥ 1.1.1则问题解决。