connection reset by peer(错误码54)是服务端或代理层主动rst连接,表明tcp已连通但被拒收;常见原因包括防火墙/dpi、代理异常、杀毒软件劫持、dns污染等,需依次排查代理变量、换源、直调python -m pip等。

这不是网络抖动,是服务端或代理层主动 RST 了连接。 出现 Connection reset by peer(错误码 54)时,TCP 层已建立连接,但对方在读写过程中突然发送 RST 包强制中断——说明问题不在“连不上”,而在“连上后被拒收”。
为什么 pip 会遇到 Connection reset by peer
pip 在下载包时走的是 HTTPS 请求(目标 host 如 files.pythonhosted.org 或 pypi.org),这个错误通常不是 pip 自身 bug,而是中间链路某处主动断连:
- 公司/校园内网的防火墙或 DPI 设备识别出 pip 流量后,超时未收到完整响应就重置连接
- 本地配置了代理(如 HTTP_PROXY / HTTPS_PROXY 环境变量),但代理服务不稳定、认证失效或不支持长连接
- 使用了老旧或配置错误的全局代理工具(如某些国产“加速器”),它在 TLS 握手后或传输中途静默丢弃连接
- 杀毒软件或安全中心劫持 HTTPS 流量并异常终止(尤其 Windows 上的 McAfee、360、腾讯电脑管家等)
- DNS 污染导致请求被导向恶意或不可用镜像节点(少见但存在)
如何快速验证是不是代理或环境变量惹的祸
先排除最常被忽略的干扰项:
- 运行
echo $HTTP_PROXY $HTTPS_PROXY(macOS/Linux)或echo %HTTP_PROXY% %HTTPS_PROXY%(Windows),如果输出非空,说明代理已启用 - 临时清空它们:
unset HTTP_PROXY HTTPS_PROXY或set HTTP_PROXY= && set HTTPS_PROXY= - 再试一次
python -m pip install requests -v(加-v查看详细请求路径) - 若成功,说明原代理配置有问题;若仍失败,继续往下排查
换源 + 显式跳过证书校验(临时救急)
国内用户遇到此错误,80% 以上和默认源的 TLS 握手或 CDN 节点异常有关。清华、中科大、阿里云等镜像源更稳定:
- 临时换源安装:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn - 注意:
--trusted-host是绕过 SSL 验证的开关,仅用于调试,不要长期开启 - 永久配置可写入
pip.conf(Linux/macOS)或pip.ini(Windows),但务必确保镜像域名拼写正确、协议为https - 若换源后仍报错,尝试加
--retries 5 --timeout 60给足重试与等待时间
绕过 pip 启动器,直调模块(排查 PATH 和 launcher 损坏)
某些系统(尤其是 Windows 多 Python 版本共存时)会出现 pip 命令指向损坏的启动器,导致底层连接行为异常:
- 改用
python -m pip install requests,强制由当前 Python 解释器加载 pip 模块 - 如果成功,说明
pip.exe或pip3可执行文件损坏,应删除 Scripts 目录下对应文件,再用python -m ensurepip --upgrade --default-pip重建 - 该方式还能规避 PATH 中混入旧版 pip 的风险
真正难定位的是那些偶发、复现率低的 RST:比如只在安装含 C 扩展的包(numpy、cryptography)时出现,可能和 pip 下载 wheel 后调用编译器过程中的并发连接有关。这类情况建议优先升级 pip(python -m pip install --upgrade pip),新版对连接复用和错误恢复更健壮——别小看这个动作,它常能直接解决问题。











