pip install urllib3装完跑不起来主因是版本冲突,如requests 2.28.2要求urllib3

直接用 pip install urllib3 就能装,但装完跑不起来?大概率是版本冲突,不是没装上。
为什么 pip install urllib3 有时会报错
最常见的是和 requests 版本对不上。比如你本地有 requests==2.28.2,它硬性要求 urllib3=1.21.1,但你 pip 装了个 urllib3==2.0.2,就会立刻报:
ERROR: requests 2.28.2 requires urllib3=1.21.1, but you have urllib3 2.0.2
这不是 pip 失败,是它在保护你——强行装高版本会导致后续 HTTP 请求静默失败、超时异常、甚至 ValueError: Timeout value connect was <object object at></object> 这种难以定位的问题。
怎么装才不踩坑
别搜“最新版”,看你的 requests 版本再决定装哪个 urllib3:
requests → 必须用 <code>urllib3==1.25.11-
requests 2.26–2.27.x→ 只认urllib3==1.26.15(CI 验证过的唯一安全版本) -
requests >= 2.28.0→ 优先选urllib3==1.26.18(1.26 系列最终补丁版,兼容性最广) - 绝对避开
urllib3 >= 2.0.0,除非你确认botocore、kubernetes、datasets全部已适配(目前绝大多数生产环境仍卡在 1.x)
验证命令:pip show requests urllib3,别只信 pip list ——它不显示依赖约束关系。
装之前必须做的事
90% 的“装了又崩”问题,根源是没隔离环境:
- 新建虚拟环境:
python -m venv ./venv && source ./venv/bin/activate(Linux/macOS)或venv\Scripts\activate(Windows) - 进环境后再执行精确安装,例如:
pip install urllib3==1.26.18 - 如果非得改系统级 Python,先跑
pip check看还有谁在拖后腿;再用pipdeptree --reverse --packages urllib3查谁依赖它,避免误伤关键工具(如 pip 自身、IDE 插件)
装完怎么确认真可用
别只 import 成功就以为完事。跑一段真实请求验证:
import urllib3<br>http = urllib3.PoolManager()<br>resp = http.request('GET', 'https://httpbin.org/get', timeout=5)<br>print(resp.status) # 应该输出 200<br>print(len(resp.data)) # 不是空字节串
重点看两点:一是 timeout 参数是否生效(排除旧版 timeout 接口失效问题),二是 resp.data 是否可读取(排除编码 fallback 失败导致的静默空响应)。这两个点,恰恰是版本错配后最容易被忽略的“表面正常、实则失效”场景。











