离线安装python第三方库的核心是:必须在外网、同python版本与系统平台环境下,用pip download --recursive递归下载完整依赖树。它真实解析setup.py或pyproject.toml,自动获取requests→urllib3→charset-normalizer等全链依赖;手动凑.whl极易遗漏,导致内网报“could not find a version”;pip install --download已废弃,且不加--platform、--python-version等参数会下错wheel,进内网因标签不匹配而跳过安装;内网安装必须成对使用--no-index与--find-links=./offline_pkgs(扁平目录),并确保无vcs依赖和权限问题。

离线安装 Python 第三方依赖库,核心就一条:pip download 必须在外网、同环境(Python 版本 + 系统平台 + 架构)下递归拉全整棵依赖树,否则进内网必卡在某个子依赖上。
为什么 pip download 是唯一靠谱起点
它会真实解析 setup.py 或 pyproject.toml,把 requests 依赖的 urllib3、certifi,甚至 urllib3 再依赖的 charset-normalizer 全部识别并下载。而手动一个一个找 .whl,漏掉任意一层,pip install 在内网就会报 Could not find a version that satisfies the requirement xxx。
常见错误现象:
- 用
pip install --download—— 该命令早在 pip 10 就被移除,执行直接报错 - 只下载主包(如
pandas),不加--recursive—— 安装时仍会尝试联网拉numpy、pytz - 在外网用 Python 3.12 下载,内网却是 3.9 —— 下载的 wheel 文件带
cp312标签,内网 pip 直接跳过,报is not a supported wheel on this platform
pip download 外网执行必须加的关键参数
不加这些,90% 的离线包进内网后无法安装。
对话式AI短视频创作工具:用户提出想法,Agent生成脚本,人工确认后自动生成MP4。触发条件:①制作视频/短视频;②AI旁白视频;③认知自述/播客风格视频;④文稿转视频。仅出现“视频”“TTS”“语音”等模糊词时不激活(可能是其他需求)。
-
--platform manylinux_2_17_x86_64(CentOS 7/8)或--platform win_amd64(Windows 64 位)—— 显式锁定目标平台标签,避免混入 macOS 或 aarch64 包 -
--python-version 39(对应 Python 3.9)—— 强制 wheel 名含cp39,跟内网解释器严格对齐 -
--only-binary=all—— 跳过源码包(.tar.gz),防止进内网后因缺编译工具(gcc、MSVC)而失败 -
--no-cache-dir—— 避免 pip 从本地缓存拼凑出不完整依赖,确保所有包都落盘到指定目录 -
-r requirements.txt -d ./offline_pkgs—— 批量下载且统一存放,目录不能嵌套
示例命令:
pip download -r requirements.txt \ --platform win_amd64 \ --python-version 311 \ --only-binary=all \ --no-cache-dir \ -d ./offline_pkgs
内网 pip install 必须成对使用的两个开关
--no-index 和 --find-links 缺一不可。单独用 --no-index,pip 会彻底拒绝查找任何包;只放包在当前目录却不写 --find-links,pip 默认只认 PyPI,直接报找不到包。
-
--no-index:强制禁用 PyPI,这是离线前提 -
--find-links ./offline_pkgs:明确告诉 pip “包全在这儿,进去翻”,且该路径下只能是扁平结构(所有.whl并列),不能有子文件夹 - 如果
requirements.txt里有-e git+https://...这类 VCS 依赖,pip download会直接跳过,必须提前删掉或转成固定 commit 的 wheel - 权限问题常被忽略:用
sudo pip install时,当前用户可能没权限读./offline_pkgs,建议切换到普通用户执行
正确安装命令:
pip install --no-index --find-links=./offline_pkgs -r requirements.txt
最容易被忽略的三个细节
不是命令记不住,而是这些地方一错,前面所有操作白做。
- 外网打包机和内网目标机的
glibc版本要兼容(如 CentOS 7 最低是glibc 2.17),否则下载的manylinux_2_17包在 CentOS 6 上运行时报Symbol not found - 某些包(如
setuptools、pkg_resources)被硬编码在运行时调用,如果下载的 wheel 里没包含其完整依赖链,导入时会抛ImportError: cannot import name 'get_distribution' from 'pkg_resources' -
pip install不会自动降级已存在包,若内网已有旧版numpy,而新requirements.txt指定numpy==1.26.4,必须显式加--force-reinstall,否则 pip 直接跳过
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










