You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建pyarrow遇CMake错误:Arrow::arrow_shared目标未找到

解决Docker构建中pyarrow编译失败(Arrow::arrow_shared未找到)的问题

核心诱因

即便未修改Dockerfile,以下场景也会触发该错误:

  • 基础镜像自动更新后,系统级Arrow C++库版本与pyarrow编译依赖不匹配
  • pyarrow安装时默认拉取了最新版本,其编译逻辑对Arrow依赖的查找规则发生变更
  • 构建缓存中残留的旧依赖导致版本冲突

具体修复步骤

1. 固定pyarrow版本

避免自动拉取最新版,指定两周前可正常构建的pyarrow版本:

RUN pip install pyarrow==<历史可用版本号>

若不确定版本,可查看历史构建日志,或尝试指定兼容稳定版(如14.0.1)。

2. 显式安装系统级Arrow C++依赖

直接在Dockerfile中安装预编译的Arrow库,让CMake能直接定位到依赖:

# Debian/Ubuntu基础镜像示例
RUN apt-get update && apt-get install -y --no-install-recommends \
    libarrow-dev \
    libarrow-python-dev \
    && rm -rf /var/lib/apt/lists/*

Alpine镜像则使用apk命令:

RUN apk add --no-cache arrow-dev arrow-python-dev

3. 强制使用pyarrow二进制包

跳过源码编译,直接拉取预编译wheel包:

RUN pip install --only-binary :all: pyarrow

注:若基础架构(如arm64)无对应二进制包,需回到步骤1固定版本。

4. 清理Docker构建缓存

旧缓存可能残留不兼容依赖,强制全量重新构建:

docker build --no-cache .

5. 固定基础镜像版本

将latest标签替换为具体版本,避免基础环境自动更新:

FROM python:3.10-slim-bullseye

调试验证

若修改后仍报错,可在Dockerfile中添加以下命令排查依赖状态:

RUN ldconfig -p | grep arrow
RUN cmake --find-package -DNAME=Arrow -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST

内容的提问来源于stack exchange,提问作者TJL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:04:57