pip check pipdeptree -p urllib3 -r pip install 'requests>=2.31' 'urllib3<3'
pip check 输出 requests 2.28.2 has requirement urllib3<1.27, but you have urllib3 2.2.1。运行到发请求时又报 ImportError: cannot import name 'DEFAULT_CIPHERS'。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,装某个新库时 pip 把 urllib3 升到了 2.x,requests 的旧版本仍然声明只支持 1.26。pip 只管安装那一刻能不能解出来,装完的组合它不做回归验证。
这次卡住的地方就在「pip check 版本冲突」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:先跑 pip check 把环境里所有不满足的约束一次列全;用 pipdeptree -p urllib3 -r 反查是谁把它带上来的;升 requests 到支持 2.x 的版本 或者把 urllib3 钉回 1.26;改完再跑一次 pip check 确认输出为空。
改完只确认一件事:pip check 不再输出任何 has requirement 行 启动时也没有 DEFAULT_CIPHERS 的 ImportError。
