requirements.txt包含cython但docker构建时pyarrow安装报未找到cython如何解决
问题根因
pip 执行pip install -r requirements.txt时默认会先完成全量依赖的下载、依赖树解析,再统一执行所有包的安装操作。即使cython在requirements.txt中的排序早于pyarrow,实际安装pyarrow(源码编译版本)时,cython还未完成写入系统路径,因此编译阶段无法找到已下载的Cython模块。
你当前使用Python3.6环境,pyarrow==5.0.0没有对应该环境的预编译wheel包,必须本地编译,因此需要提前准备好所有编译依赖。
解决方案
- 方案1:拆分Dockerfile的pip安装步骤(最稳妥)
将原有的单步安装指令拆分为两步,先单独安装编译依赖:
# 提前安装pyarrow编译所需依赖 RUN pip3 install --no-cache-dir cython==0.29 cmake # 再安装其余依赖 RUN pip3 install --no-cache-dir -r requirements.txt
可同步删除requirements.txt中的cython、cmake声明,避免重复校验。
- 方案2:补充系统级编译依赖(避免后续编译报错)
如果基础镜像没有预装编译工具,可在pip安装前添加系统依赖安装步骤,debian/ubuntu系基础镜像指令如下:
RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libssl-dev \ libffi-dev \ libarrow-dev \ && rm -rf /var/lib/apt/lists/*
- 方案3:使用预编译wheel包(可选)
如果不想进行本地编译,可以手动指定pyarrow对应Python3.6的预编译wheel源,跳过源码编译步骤。
内容的提问来源于stack exchange,提问作者Saturnian
相关产品推荐
相关产品推荐

