根本原因是pip默认从海外官方源下载且不复用已下载包;应换国内镜像源(临时用-i参数,永久配pip.conf或pip.ini)并确保私有源符合pep 503规范以启用缓存。

为什么pip install总是卡在Downloading阶段
根本原因不是网络差,而是默认从官方源 https://pypi.org/simple/ 下载,所有包都走海外节点,DNS解析+TCP建连+大文件传输三重延迟。更关键的是,每次安装都重新下载完整wheel或sdist,不复用已下载过的二进制包。
换国内镜像源:临时用法和永久配置怎么选
临时生效适合单次调试或CI环境,避免污染全局配置;永久配置适合日常开发,但要注意不同Python环境(venv、conda、系统级)可能有独立pip配置。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 临时指定:运行
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests - 永久配置(Linux/macOS):在
~/.pip/pip.conf写入:[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple/ trusted-host = pypi.tuna.tsinghua.edu.cn
- 永久配置(Windows):在
%APPDATA%\pip\pip.ini写相同内容 - 注意
trusted-host必须显式声明,否则HTTPS证书校验失败会报Could not fetch URL
启用wheel缓存后为什么还是重复下载
pip默认开启缓存(--cache-dir),但缓存只对成功安装的wheel有效;如果安装中途失败、或包被强制重装(如加 --force-reinstall)、或wheel平台标签不匹配(比如在macOS上缓存了win_amd64的wheel),缓存就失效。
- 检查当前缓存位置:运行
pip debug --verbose查看cache_dir值 - 手动清理损坏缓存:
pip cache info和pip cache purge - 跨平台项目建议加
--only-binary=:all:强制用wheel,避免本地编译触发缓存绕过 - 私有包若没上传wheel,pip会退回到sdist并跳过缓存——这时得让私有源也提供wheel
私有源(如Nexus、Artifactory)如何与pip缓存协同工作
私有源本质是镜像代理,但pip不会自动把私有源的包存进本地缓存,除非它被当作“可信源”且返回标准HTTP头(如 Content-Type: application/octet-stream)。常见问题是私有源返回了302跳转或非标准响应体,导致pip放弃缓存。
- 确认私有源返回的wheel URL是直接可下载的,不要带登录重定向
- 在pip配置中把私有源放在
index-url,不要只放extra-index-url,否则缓存优先级低 - 私有包名若含下划线(如
my_pkg),需确保私有源索引页返回的链接路径与包名严格一致,否则缓存key计算失败 - 企业级部署建议用
pip-tools生成固定版本的requirements.txt,再配合私有源+缓存,避免依赖树动态解析引发的多次回源
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










