不能离线安装 venv,但可离线安装其依赖包,关键在于必须同时使用 --no-index 和 --find-links 参数;否则 pip 默认联网访问 PyPI,离线时会报“Could not find a version”或连接错误。

直接说结论:不能“离线安装 venv”,但可以离线安装 venv 里的依赖包——关键在 pip install --no-index --find-links 这组参数,缺一不可。
为什么 pip install -r requirements.txt 在离线环境会失败
默认情况下,pip install 会尝试连接 PyPI(https://pypi.org/simple)解析并下载每个包及其所有间接依赖。离线机器没有网络,就会卡在 “Could not find a version that satisfies the requirement” 或直接报 ConnectionError。
常见错误现象包括:
ERROR: Could not find a version that satisfies the requirement xxx (from versions: none)-
ERROR: No matching distribution found for numpy==1.24.3(尤其在平台/Python 版本不匹配时) - 明明有
.whl文件,却提示xxx.whl is not a supported wheel on this platform
根本原因不是 pip 本身坏了,而是它没被告知“别上网,本地找”。
立即学习“Python免费学习笔记(深入)”;
pip download 必须带平台和 Python 版本参数
在联网机器上执行 pip download 时,如果只写 pip download -r requirements.txt -d packages,很可能下回来一堆不兼容的包——比如 macOS 的 manylinux 轮子被下到 Windows 目录里,或 Python 3.9 的 .whl 被下到 Python 3.11 环境中。
务必显式指定目标环境特征:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
-
--platform win_amd64(Windows 64 位)或--platform manylinux2014_x86_64(CentOS 7+/Rocky Linux)或--platform macosx_10_9_x86_64 -
--python-version 311(对应 Python 3.11;注意是311不是3.11) -
--only-binary=:all:强制只下预编译轮子,避开源码包(.tar.gz)需要编译的问题
完整命令示例(Windows + Python 3.11):
pip download -r requirements.txt -d ./offline_packages \ --platform win_amd64 \ --python-version 311 \ --only-binary=:all:
pip install 离线安装时的三个必要条件
在离线机器上激活 venv 后,运行安装命令前,必须同时满足以下三点,否则大概率失败:
-
--no-index:彻底禁用 PyPI 索引,不许 pip 去网上查任何东西 -
--find-links指向包含.whl文件的**目录路径**(不是文件路径),且该目录下必须有index.html或能被 pip 自动识别为包源(实际只需放好.whl即可) -
-r requirements.txt中的包名、版本号,必须与./offline_packages/下已存在的.whl文件名严格匹配(比如numpy-1.24.3-cp311-cp311-win_amd64.whl对应numpy==1.24.3)
正确命令(Linux/macOS 示例):
source my_venv/bin/activate pip install --no-index --find-links=./offline_packages -r requirements.txt
Windows 用户注意:--find-links=. 中的点必须是当前工作目录,且需先 cd 进入 offline_packages 所在父目录,否则路径解析易出错。
二进制依赖(如 numpy、pandas)最容易踩的坑
这类包几乎都含 C 扩展,离线安装失败十次里有八次是因为 wheel 不匹配。核心检查项:
- 联网机器和离线机器的
python -c "import platform; print(platform.machine())"输出必须一致(AMD64vsx86_64通常可互认,但ARM64和AMD64绝对不行) - 确认离线机器 Python 是 64 位:
python -c "import struct; print(struct.calcsize('P') * 8)"应输出64 - 某些包(如
cryptography)在 PyPI 上无 Windows wheel,得去 Gohlke 非官方库 手动下载,注意核对cp311、win_amd64标签
最省事的做法:在联网机器上用和离线机**完全相同的系统+Python版本**跑一遍 pip install -r requirements.txt,再用 pip download --find-links ~/.cache/pip/wheels -d ./offline_packages -r requirements.txt 复用本地 wheel 缓存,基本不会翻车。


















