一、在外网机器上:下载所有依赖包(关键步骤)

你需要一台可以联网的电脑(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 环境

  1. 激活 Test 环境:

    bash

    conda activate Test
    
  2. 进入包目录并安装:

    bash

    cd ~/openpyxl_offline
    pip install --no-index --find-links=./ openpyxl
    
    • --no-index:禁止 pip 去外网找包
    • --find-links=./:告诉 pip 从当前目录找依赖
  3. 验证安装是否成功:

    bash

    python -c "import openpyxl; print(openpyxl.__version__)"
    

    如果能正常输出版本号,说明安装成功,你的 pandas.read_excel 报错就解决了。


四、备选方案:用 Conda 包离线安装

如果你习惯用 conda,也可以在外网下载 .tar.bz2 格式的 conda 包:

  1. 在外网 conda 环境里下载:

    bash

    conda install -c conda-forge openpyxl --download-only --prefix ./conda_pkgs
    
  2. 把 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:指定本地包所在的目录。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐