pip download是唯一正确命令,专用于只下载不安装;pip install --download早在pip 9.0中被移除,现执行会报错。

pip download 是唯一正确命令
别用 pip install --download,它早在 pip 9.0 就被彻底移除了,现在执行会直接报错 no such option: --download。所有“只下载不安装”的需求,必须用 pip download —— 它专为此设计,且行为稳定、语义明确。
基础用法:下载单个包或整个 requirements.txt
最常用场景就是把项目依赖提前扒下来,比如你有 requirements.txt,内容是:
django==4.2.18 psutil==5.9.8 requests[security]==2.31.0
执行以下命令即可全部下载到本地目录(如 ./offline_pkgs):
pip download -d ./offline_pkgs -r requirements.txt
- 默认会递归下载所有依赖(包括子依赖、孙依赖),不用额外加
--recursive - 下载的包自动匹配当前运行环境的平台标签(如
cp39-cp39-manylinux_2_17_x86_64)和 Python 版本 - 如果目标机器是 CentOS 7 + Python 3.9,而你在 macOS 上跑这条命令,很可能下错 wheel —— 后面离线安装时会报
is not a supported wheel on this platform
跨平台下载必须显式指定 --platform 和 --python-version
内网部署最常翻车的地方就在这儿:你以为下了就能装,结果进内网发现包根本打不开。
比如你要为 CentOS 7(glibc 2.17)、Python 3.9、x86_64 架构打包,外网打包机却是一台 macOS,那就得强制指定目标环境:
生成 GitHub Actions、GitLab CI、Jenkins 的 CI/CD 流水线配置,适用于 Node.js、Python、Go、Docker 项目,支持回滚等配置。
pip download -d ./offline_pkgs -r requirements.txt --platform linux_x86_64 --python-version 39 --only-binary=:all:
-
--platform linux_x86_64:告诉 pip 别看当前系统,只下 Linux x86_64 兼容的 wheel -
--python-version 39:对应cp39,不能写成3.9或3.9.0 -
--only-binary=:all::禁用源码包(.tar.gz),避免后续编译失败;尤其在没装gcc的内网机器上这是刚需 - 漏掉
--no-cache-dir可能导致 pip 拼凑缓存里的旧 wheel,造成依赖不全 —— 建议始终加上
离线安装时 --no-index 和 --find-links 必须成对出现
下载完只是第一步,进内网后安装才是关键。常见错误是只写 pip install --no-index -r requirements.txt,结果报 Could not find a version that satisfies the requirement xxx。
真正有效的命令是:
pip install --no-index --find-links=./offline_pkgs -r requirements.txt
-
--no-index:关掉 PyPI,强制不联网 -
--find-links=./offline_pkgs:明确告诉 pip “包全在这目录里,自己进去找”,且该目录下不能有子文件夹 —— pip 不会递归扫描 - 如果
requirements.txt里含-e git+https://...这类 VCS 依赖,pip download会直接跳过,安装时必然失败;必须提前手动转成固定 commit 的 wheel 或删掉 - 权限问题也高频:用
sudo pip install时,当前用户可能无权读./offline_pkgs,建议统一用普通用户操作
最麻烦的不是命令记不住,而是依赖树太深时,你看着 Successfully downloaded 就以为齐了,结果某个包内部硬编码调用了另一个没显式声明的依赖 —— 这种只能靠实际运行时暴露,提前没法 100% 防住。

















