pip下载断线本质是tcp连接被主动中断,非网速慢所致;应采用换源、加超时、用pip download离线安装三招组合应对,覆盖95%场景。

pip 下载包断线,本质是网络连接中途被切断,不是“下一半失败”,而是 TCP 连接主动或被动中断。直接换源 + 加超时 + 用缓存,三招覆盖 95% 场景。
为什么 pip download 会突然断线
不是网速慢,而是连接被重置:可能是运营商 DNS 劫持、防火墙主动 kill 长连接、Wi-Fi 切换导致 IP 变更、或 PyPI 服务端主动关闭空闲连接。尤其在安装 torch、tensorflow 这类大包时,单个文件超 100MB,下载耗时长,断线概率陡增。
- 错误典型表现:
ReadTimeoutError、ConnectionResetError、BrokenPipeError,而非ConnectTimeoutError - 临时换源(如加
-i)只能缓解,不能防断线——因为镜像源同样可能被中间设备干扰 -
pip install --retries 5默认已启用,但重试不解决“连接已断”的状态,只会重复发起新请求
用 pip download 先拉全量再 install
绕过安装时实时下载的脆弱性,把“下载”和“安装”彻底拆开。适合网络不稳定但允许离线操作的场景。
- 先执行:
pip download -i https://pypi.tuna.tsinghua.edu.cn/simple/ --no-deps --platform manylinux2014_x86_64 --python-version 3.11 --only-binary=:all: requests(按需替换平台、Python 版本) - 下载完得到
requests-2.32.3-py3-none-any.whl等文件,后续可反复pip install ./requests-2.32.3-py3-none-any.whl,完全不走网络 - 加
--no-deps是关键:避免依赖包触发二次下载;若需依赖,改用--no-cache-dir配合--find-links ./download_dir控制来源
永久配置 timeout 和 trusted-host 防握手失败
很多断线其实发生在 TLS 握手或首包响应阶段,不是下载中止,而是连不上。这时光换源没用,必须调底层参数。
- 在
~/.pip/pip.conf(Linux/macOS)或%APPDATA%\pip\pip.ini(Windows)里写入: [global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple/trusted-host = pypi.tuna.tsinghua.edu.cn-
timeout = 6000(单位秒,不是毫秒) retries = 10- 注意:
trusted-host必须和index-url域名严格一致,否则 SSL 验证失败仍会断线
代理或企业网络下必须显式禁用 keep-alive
某些企业网关、出口防火墙会强制回收 HTTP keep-alive 连接,而 pip 默认复用连接。一断就全崩。
- 临时方案:加环境变量再运行命令
export PYTHONHTTPSVERIFY=0(仅测试)export PIP_DISABLE_PIP_VERSION_CHECK=1(减少额外请求) - 根本解法:用
pip config set global.global-options "--disable-pip-version-check"避免后台检查干扰主流程 - 若用代理,确认代理支持 HTTP/1.1 keep-alive;否则在代理配置里加
Connection: close头,让 pip 每次都建新连接——反而更稳
真正难处理的是 DNS 层劫持或中间盒主动 reset,这种情况下,哪怕配置了所有参数,pip install 仍可能在第 37 秒无声断开。此时别硬扛,切到 pip download 模式才是务实选择。











