该警告提示urllib3或pyOpenSSL版本不匹配,存在TLS/HTTPS兼容风险;应升级urllib3≥22.0.0、cryptography≥38.0.0、cffi≥1.15.0,避免屏蔽警告,通过TLS 1.3请求及urllib3.util.ssl_.IS_SECURE_TRANSPORT验证修复效果。

Requests发出DependencyWarning:urllib3或pyOpenSSL版本不匹配
这个警告不是报错,但说明当前环境存在潜在的TLS/HTTPS兼容风险——requests检测到urllib3太旧(pyOpenSSL未安装/版本过低,导致它被迫回退到不安全的连接策略(比如忽略SNI、禁用ALPN、无法验证某些证书链)。实际请求可能成功,但中间人攻击防护能力下降。
升级urllib3前先确认requests与urllib3的兼容边界
requests 2.28.0+ 内置了较新urllib3(v1.26.12),但如果你手动安装过urllib3,反而可能触发版本冲突。关键是看requests是否“自带”了urllib3,还是依赖系统级安装:
- 运行
python -c "import requests; print(requests.__version__)"和python -c "import urllib3; print(urllib3.__version__)",对比两者版本 - 若
requests≥ 2.28.0 且urllib3 - 推荐做法:优先用
pip install --upgrade requests,它会自动拉取兼容的urllib3;不要单独pip install --upgrade urllib3 - 若项目锁定了
requests==2.25.1这类老版本,就只能同步锁定urllib3==1.25.11(查requests源码requirements.txt对应关系)
pyOpenSSL不是必需项,但某些场景下它会被requests主动加载
pyOpenSSL仅在以下情况被requests启用:系统Python缺少现代SSL支持(如CentOS 6默认的OpenSSL 1.0.1e)、或你显式调用了requests.adapters.HTTPAdapter(ssl_context=...)并传入了OpenSSL-backed上下文。大多数现代环境(Python 3.6+ + OpenSSL 1.1.1+)根本不需要它。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 检查是否真被加载:
python -c "import requests; print(hasattr(requests.packages.urllib3.util.ssl_, 'create_urllib3_context'))"返回True说明原生SSL可用,pyOpenSSL不会介入 - 如果确实需要(比如对接老旧FIPS系统),安装
pyOpenSSL>=22.0.0(支持OpenSSL 3.x),同时确保cryptography>=38.0.0和cffi>=1.15.0已满足 - 常见坑:在Alpine Linux上装
pyOpenSSL失败,是因为缺gcc和openssl-dev,需先apk add gcc openssl-dev musl-dev
验证警告是否真正消失,而不是被简单屏蔽
别用warnings.filterwarnings("ignore", category=DeprecationWarning)掩盖问题——这会让真实SSL异常也静默掉。正确验证方式是:
- 发起一个明确走TLS 1.3的请求(如访问
https://httpbin.org/get),然后检查响应头中的via或用curl -v https://httpbin.org/get 2>&1 | grep "ALPN"交叉比对 - 在Python中加一句调试:
import urllib3; print(urllib3.util.ssl_.IS_SECURE_TRANSPORT),返回True表示底层SSL栈可信 - 如果仍见Warning,用
python -Wd -c "import requests; requests.get('https://httpbin.org/get')"开启详细警告输出,看具体是哪个模块抛出的DependencyWarning
真正棘手的是混合环境:比如conda环境里requests来自conda-forge,而urllib3来自pip,这种来源混杂最容易引发签名不一致和警告误报。遇到这种情况,统一用conda install requests或彻底清空site-packages重建虚拟环境更省事。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










