离线安装Jupyter Notebook依赖缺失 如何自动下载全量依赖包
pip离线下载漏拉全层级依赖解决方法
核心原因
漏下pyzmq这类间接依赖通常是两个原因导致:
- 联网设备上的pip版本低于20.3,使用旧版依赖解析器,无法完整递归拉取所有层级的依赖包
- 安装的目标包是alpha/beta等预发布版本(比如示例里的
notebook==7.0.0a4),pip默认不会解析预发布版本的依赖链,且默认仅下载和当前执行环境匹配的安装包,遇到带C扩展、分平台发布的依赖时容易漏包
操作步骤
前置准备(可联网设备)
先把pip升级到最新版本,避免旧版解析器的bug:
pip install -U pip
尽量保证可联网设备和目标离线设备的操作系统版本、CPU架构、Python大版本完全一致。
- 编写
requirements.txt,仅需要写入你要安装的目标顶层包即可,不需要手动添加任何间接依赖,示例:notebook==7.0.0a4 - 执行下载命令,替换原流程里的
pip download命令:mkdir wheelhouse pip download -r requirements.txt -d wheelhouse --pre--pre参数作用是允许pip解析预发布版本的依赖链,解决alpha/beta版包依赖拉不全的问题。
如果两台设备环境无法做到完全一致,需要在下载命令里追加参数指定目标离线设备的环境,避免下载的包和目标环境不匹配、漏下对应平台的依赖:# 示例参数对应64位Linux、Python3.10环境,按需替换成目标设备的实际值 pip download -r requirements.txt -d wheelhouse --pre \ --platform manylinux2014_x86_64 \ --python-version 310 \ --only-binary=:all: - 将
requirements.txt复制到wheelhouse目录下,执行打包命令:tar -zcf wheelhouse.tar.gz wheelhouse
离线设备安装
- 解压传输过来的压缩包:
tar -zxf wheelhouse.tar.gz - 执行安装命令:
pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse --pre
兜底方案
如果上述操作仍有漏包,可以在可联网设备上新建一个完全干净的虚拟环境,先在虚拟环境内把需要的包装好,再执行pip freeze > requirements.txt导出全量依赖列表,用这个列表重新执行下载流程即可,这种方式导出的依赖列表和实际安装的全量依赖完全一致,不会出现漏项。
内容的提问来源于stack exchange,提问作者J.Todd
相关产品推荐
相关产品推荐

