一、在外网机器上:下载所有依赖包(关键步骤)
你需要一台可以联网的电脑(Windows/Linux 都行),下载openpyxl及其所有依赖的.whl文件。
1. 先确认内网环境信息
在内网 Ubuntu 上,激活你的Test环境,查看 Python 版本和系统架构:
bash
conda activate Test python --version # 输出示例:Python 3.10.12 uname -m # 输出示例:x86_64你的Test环境是Python 3.10、x86_64架构,下载时要匹配。
2. 在外网机器上,下载所有依赖
在外网机器上,用和内网相同版本的 Python(比如 Python 3.10)执行:
bash
# 新建一个目录存包 mkdir openpyxl_offline cd openpyxl_offline # 下载 openpyxl 及其所有依赖 pip download openpyxl -d ./ --python-version 3.10 --platform linux_x86_64 --only-binary=:all:执行完成后,openpyxl_offline目录里会有所有.whl文件(包括openpyxl、et_xmlfile等依赖)。
二、把包传到内网 Ubuntu
通过 U 盘、内网文件共享等方式,把整个openpyxl_offline目录传到你的内网 Ubuntu 机器上,比如传到~/openpyxl_offline。
三、在内网 Ubuntu 上,离线安装到你的Test环境
激活
Test环境:bash
conda activate Test进入包目录并安装:
bash
cd ~/openpyxl_offline pip install --no-index --find-links=./ openpyxl--no-index:禁止 pip 去外网找包--find-links=./:告诉 pip 从当前目录找依赖
验证安装是否成功:
bash
python -c "import openpyxl; print(openpyxl.__version__)"如果能正常输出版本号,说明安装成功,你的
pandas.read_excel报错就解决了。
四、备选方案:用 Conda 包离线安装
如果你习惯用 conda,也可以在外网下载.tar.bz2格式的 conda 包:
- 在外网 conda 环境里下载:
bash
conda install -c conda-forge openpyxl --download-only --prefix ./conda_pkgs - 把
conda_pkgs目录传到内网,然后安装:bash
conda activate Test conda install --offline --use-local ./conda_pkgs/linux-64/openpyxl-*.tar.bz2
五、避坑提醒
- ❌ 不要手动复制单个库文件:
openpyxl依赖et_xmlfile等其他库,手动复制很容易漏依赖。 - ✅ 必须下载和内网 Python 版本、系统架构完全匹配的包,否则会出现
invalid ELF header或版本不兼容错误。 - ✅ 安装时一定要先激活
Test环境,否则会装到 base 环境里,不会被你的代码识别。
如何一次性捞出所有依赖?
你原本的命令已经很接近了,但还需要补充一个官方要求的组合参数:
bash
pip download flask==3.1.3 \ -d ./packages \ --python-version 3.10 \ --platform linux_x86_64 \ --only-binary=:all: \ --no-deps
🔧 关键参数解释
--no-deps:这是最关键的一点!当你指定了--platform和--python-version这类跨平台参数时,根据pip的安全机制,必须配合--no-deps一起使用。这能强制pip完全基于你提供的目标环境信息来解析依赖,而不是依赖本地环境,从而确保所有子依赖都能被正确拉取。--only-binary=:all::这个参数确保为所有包下载预编译的wheel格式文件(.whl)。wheel文件可以避免在离线服务器上因缺少C编译器而导致安装失败,是实现可靠离线部署的最佳实践。如果某些依赖没有提供wheel文件,这个命令会报错,方便你发现和处理。
📝 几点使用建议
目标Python版本:
--python-version应使用不带点号的数字,如310,代表 Python 3.10。目标系统平台:
--platform的值应与你目标服务器的环境严格一致。如果目标服务器是较新的 Linux,可以尝试使用更通用的manylinux2014_x86_64。下载结果:运行上述命令后,
./packages目录下将包含Flask 3.1.3 以及它所有依赖的.whl文件。离线安装:将
./packages文件夹复制到目标机器后,使用如下命令即可完成离线安装:bash
pip install --no-index --find-links ./packages flask==3.1.3
--no-index:强制pip只从本地查找,不访问网络索引。--find-links ./packages:指定本地包所在的目录。