ReadTimeoutError本质是HTTP响应读取超时而非连接失败,常见于下载大包或镜像源响应卡顿;应使用--default-timeout配合国内可信镜像源(如清华、中科大、阿里云)临时解决,永久配置需在pip.ini/pip.conf中同时设置index-url和default-timeout。

ReadTimeoutError 本质是等不到响应,不是连不上
这个错误不是你本地网络断了,而是 pip 发起 HTTP 请求后,在规定时间内没收到服务器返回的完整数据。常见于下载大包(如 torch、tensorflow)或镜像源某次响应卡在中间 chunk。错误信息里带 Read timed out 就说明连接已建立,只是读取慢;如果连 ConnectTimeoutError 都有,那才是 DNS 或防火墙问题。
临时安装时加 --default-timeout 和国内源最有效
单次命令就解决,不用改配置、不污染环境:
- 必须同时指定镜像源和超时:比如
pip install torch --default-timeout=120 -i https://pypi.tuna.tsinghua.edu.cn/simple/ -
--timeout只控连接建立时间,--default-timeout才管整个请求生命周期(DNS + TLS + 响应读取) - 别用豆瓣源——它已停止维护,
curl -I https://pypi.douban.com/simple/requests/返回 404 就别试了 - 清华、中科大、阿里云三个源可互备,一个不行立刻换另一个
永久配置别只写 index-url,漏掉 default-timeout 会白配
Windows 用户在 %APPDATA%\pip\pip.ini,macOS/Linux 在 ~/.pip/pip.conf,内容必须包含这两行:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple/ default-timeout = 100
只写第一行,遇到大包照样超时;设成 60–120 足够,设太大(如 600)会让真断网时傻等 10 分钟才报错。
CI/CD 环境里光换源不够,还得关缓存+设环境变量
GitHub Actions、GitLab CI 这类环境 DNS 不稳、出口 IP 易被限频,光靠命令行参数容易被覆盖:
- 务必用
PIP_INDEX_URL和PIP_DEFAULT_TIMEOUT环境变量,而不是只传--index-url - 加
--no-cache-dir——容器里复用 pip 缓存反而容易因损坏导致静默失败 - 优先用
actions/setup-python官方 action,它内置镜像 fallback 和包缓存,比裸跑pip install稳得多
真正卡住的时候,往往不是 timeout 没调对,而是 pip 默默重试三次,每次又都超时,最后才报错——所以看到超时提示,先确认是不是重试耗尽了,再决定调参数还是换源。


















