唯一可靠路径是用pip download --recursive在外网同环境预拉全依赖树;必须加--recursive、--platform、--python-version、--only-binary=all、--no-cache-dir,内网安装须配对使用--no-index与--find-links,且wheel须平铺于目录。

离线批量安装 Python 第三方库,唯一可靠路径是用 pip download --recursive 在外网同环境预拉全依赖树,而不是手动凑 .whl 文件——漏掉任意一层(比如 requests 依赖的 charset-normalizer),内网 pip install 就会报 Could not find a version that satisfies the requirement。
pip download 必须加的参数组合
不加这些,下载下来的包大概率进不了内网:
-
--recursive:强制解析并下载全部依赖,不是只下主包 -
--platform win_amd64或--platform manylinux_2_17_x86_64:显式指定目标系统平台标签,避免混入 macOS/aarch64 包 -
--python-version 39(对应 Python 3.9):让 wheel 名含cp39,跟内网解释器严格对齐 -
--only-binary=all:跳过.tar.gz源码包,防止内网因缺gcc或MSVC编译失败 -
--no-cache-dir:避免 pip 从本地缓存拼凑出不完整依赖,确保所有包都落盘到-d指定目录
典型命令:pip download -r requirements.txt -d ./offline_pkgs --recursive --platform win_amd64 --python-version 39 --only-binary=all --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple
内网安装必须成对使用 --no-index 和 --find-links
只写 pip install *.whl 是错的——pip 仍会尝试联网查索引、校验元数据,失败就卡住。正确做法是彻底关闭网络查找:
立即学习“Python免费学习笔记(深入)”;
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
--no-index:禁用所有远程源(包括默认 PyPI) -
--find-links ./offline_pkgs:只从本地扁平目录找包(注意:不是子目录,必须是所有.whl直接放在./offline_pkgs下)
执行命令:pip install --no-index --find-links=./offline_pkgs -r requirements.txt
如果报 is not a supported wheel on this platform,说明外网下载时漏了 --platform 或 --python-version,wheel 标签跟内网不匹配。
requirements.txt 里不能有 VCS 依赖或本地路径
像 git+https://github.com/xxx/yyy.git@main 或 ./src/mylib 这类写法,pip download 无法处理,会直接报错退出。必须提前转换为固定版本的 PyPI 包:
- 把 git 依赖改成对应 PyPI 发布版本,例如
requests==2.31.0 - 把本地路径依赖打包上传到私有源,或手动构建为
.whl后放入offline_pkgs目录 - 检查
requirements.txt是否含-e(editable mode),它也不支持离线下载
可用 pipreqs . --savepath requirements.txt 生成干净依赖列表,但需人工核对是否含 VCS 行。
最易被忽略的是 wheel 标签一致性:Python 版本、OS 平台、CPU 架构三者必须在外网下载和内网运行时完全一致,差一个字符(比如 cp39 vs cp310)就会被 pip 静默跳过——连错误都不报,只显示 Skipping,然后卡在某个依赖上不动。

















