必须递归下载整棵依赖树并补全wheel、setuptools、pip三个构建底包,否则pip install -r会直接报错退出;因pip download -r默认只下业务包,不包含构建必需的底层工具,且未指定--only-binary=:all:、--platform、--python-version时易混入源码包或平台不匹配的轮子。

pip download 必须递归下载整棵依赖树,且要补全 wheel、setuptools、pip 这三个构建链底包——漏一个,pip install -r requirements.txt 就会直接退出,不报缺什么,只显示错误。
为什么 pip download -r requirements.txt 默认不行?
它只拉顶层包及其直接依赖,但不会自动包含构建过程必需的底层工具:wheel 用来把 .tar.gz 编译成 .whl,setuptools 支持 setup.py 运行,pip 自身新版对离线模式更友好。这些包不在你的 requirements.txt 里,pip download 也默认跳过。
- 没加
--only-binary=:all:,可能混入.tar.gz源码包——离线机若无gcc或Visual Studio Build Tools,安装当场失败 - 没指定
--platform和--python-version,比如在 Windows 上下载却要装到 CentOS 7,得到的是win_amd64轮子,根本没法用 -
pip download不查本地缓存,但如果你之前跑过其他命令,--no-cache-dir建议始终带上,避免 pip 拼凑出不完整依赖
怎么下全整棵树,包括那三个关键底包?
分两步走:先单独下构建链,再递归拉业务依赖。顺序不能反,否则 --recursive 可能因缺 wheel 而解析失败。
- 执行:
pip download wheel setuptools pip --no-deps --only-binary=:all: -d ./packages - 再执行:
pip download -r requirements.txt --only-binary=:all: --platform manylinux2014_x86_64 --python-version 3.10 --no-deps -d ./packages - 最后补全依赖树:
pip download --no-index --find-links=./packages --recursive -d ./packages -r requirements.txt
注意:--no-index 在这一步必须加,否则 pip 仍会尝试联网校验版本,超时卡死。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
离线机上安装时最常踩的坑
pip install 在离线环境不是“有包就能装”,路径、权限、顺序都得对。
-
--find-links指向的目录不能有子目录——pip 不递归扫描,所有.whl必须平铺在该目录下 - 必须配对使用
--no-index和--find-links;只写--find-links会被忽略,pip 还是去 PyPI 找 - 用
sudo pip install容易因用户环境隔离导致找不到包,建议切到目标用户下执行,或加--user - 如果
requirements.txt里有-e git+https://...这类 VCS 依赖,pip download无法处理,必须提前删掉或转成固定 commit 的.whl
平台标识和 Python 版本怎么选?
不是凭感觉,而是按目标机器真实环境填。2026 年主流组合如下:
- CentOS 7 / Rocky Linux 8 x86_64 →
--platform manylinux2014_x86_64 - Windows Server 2019 x64 →
--platform win_amd64 - macOS Sonoma Intel →
--platform macosx_10_15_x86_64 - macOS Sequoia Apple Silicon →
--platform macosx_11_0_arm64 - Python 版本必须精确到小版本号,例如目标机是
3.10.12,就得写--python-version 3.10(不是3.10.12)
包文件名里的 cp310、cp39 等 ABI 标签必须匹配,否则运行时报 ImportError: cannot import name ...,但错误信息里根本不会提 ABI 不兼容。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










