requests 2.25.x及更老版本硬编码依赖urllib3>=1.21.1,而2.26.0+要求urllib3>=1.26.5且<2.0.0,2.32.0+则支持urllib3>=2.0.2。

查清当前requests和urllib3的实际版本关系
不要只看报错里的版本号,得确认requests到底“认”哪个urllib3。requests 2.25.x 及更老版本(比如你接手的遗留项目)硬编码要求 urllib3>=1.21.1,;而 requests 2.28.0+ 开始支持 <code>urllib3>=1.21.1,。关键动作是运行两行命令:
python -c "import requests; print(requests.__version__)"python -c "import urllib3; print(urllib3.__version__)"
如果 requests 是 2.25.1 但 urllib3 是 1.26.14,那警告必然出现——这不是 pip 没装好,而是版本根本不在白名单里。
按 requests 版本选对 urllib3 兼容版本
别盲目 pip install --upgrade urllib3,这大概率会让警告变红字报错。要严格对照:
- requests ≤ 2.25.x → 必须用
urllib3==1.25.11(1.25 系列最新稳定版) - requests 2.26–2.27.x → 可用
urllib3==1.26.15(注意不是 1.26.16+) - requests ≥ 2.28.0 → 推荐
urllib3==1.26.15或urllib3==1.26.16,但避开 1.27.0+(尚未被官方 CI 验证)
执行安装时用精确版本号,例如:pip install urllib3==1.25.11。pip 会自动卸载旧版,无需手动 uninstall。
立即学习“Python免费学习笔记(深入)”;
chardet 版本必须同步锁死
很多人只盯 urllib3,却忽略 chardet 同样触发 RequestsDependencyWarning。requests 对它的约束比 urllib3 更窄:chardet>=3.0.2,。哪怕 urllib3 正确,chardet 是 3.1.0 或 4.0.0,警告照出。
- 验证命令:
pip show chardet - 安全安装:
pip install chardet==3.0.4(3.0.x 系列最稳) - 注意:requests 2.28+ 默认倾向用
charset-normalizer替代 chardet,但若项目显式 import chardet 或依赖旧逻辑,仍需保留并锁定
虚拟环境里操作,别碰全局 Python
在系统级 Python 或用户级 site-packages 里硬改版本,极易引发其他工具(如 pip、venv、甚至 IDE 插件)行为异常。真实项目中,90% 的“修复后又复发”问题都源于没隔离环境。
- 新建干净环境:
python -m venv ./venv - 激活后重装:
source ./venv/bin/activate(macOS/Linux)或venv\Scripts\activate(Windows) - 然后只装目标组合:
pip install requests==2.25.1 urllib3==1.25.11 chardet==3.0.4
特别提醒:VS Code 的 Python 扩展默认使用工作区关联的解释器,改完环境后务必在命令面板里选对 interpreter,否则终端看着对,调试器还在跑老版本。


















