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

在Google Cloud Cloud Build的Python 3.10.8 Docker镜像中安装GDAL失败求助

在Google Cloud Build中基于Python 3.10.8镜像安装GDAL失败问题

我正尝试在Google Cloud的Cloud Build环境中,基于Python 3.10.8的Docker镜像安装GDAL,但目前未找到可行方案。尝试了多种网上的方法后,始终出现如下错误:

Step #0: Step 5/9 : ENV PATH $PATH:/usr/bin
Step #0:  ---> Running in 7b48f619d4a1
Step #0: Removing intermediate container 7b48f619d4a1
Step #0:  ---> b4313bd792ac
Step #0: Step 6/9 : ENV PATH $PATH:/usr/share/lintian/overrides/gdal-bin
Step #0:  ---> Running in 1745e30e8a86
Step #0: Removing intermediate container 1745e30e8a86
Step #0:  ---> 1f7ec2e34cd8
Step #0: Step 7/9 : ARG CPLUS_INCLUDE_PATH=/usr/include/gdal
Step #0:  ---> Running in 4d3ccf1e9efa
Step #0: Removing intermediate container 4d3ccf1e9efa
Step #0:  ---> 787d1acef1f3
Step #0: Step 8/9 : ARG C_INCLUDE_PATH=/usr/include/gdal
Step #0:  ---> Running in 00340d417631
Step #0: Removing intermediate container 00340d417631
Step #0:  ---> 1922c706cabe
Step #0: Step 9/9 : RUN pip install GDAL
Step #0:  ---> Running in 71a5e16d25d4
Step #0: Collecting GDAL
Step #0:   Downloading GDAL-3.7.0.tar.gz (775 kB)
Step #0:      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 775.5/775.5 kB 40.0 MB/s eta 0:00:00
Step #0:   Preparing metadata (setup.py): started
Step #0:   Preparing metadata (setup.py): finished with status 'error'
Step #0:   error: subprocess-exited-with-error
Step #0:   
Step #0:   × python setup.py egg_info did not run successfully.
Step #0:   │ exit code: 1
Step #0:   ╰─> [84 lines of output]
Step #0:       WARNING: numpy not available!  Array support will not be enabled
Step #0:       running egg_info
Step #0:       creating /tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info
Step #0:       writing /tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info/PKG-INFO
Step #0:       writing dependency_links to /tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info/dependency_links.txt
Step #0:       writing requirements to /tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info/requires.txt
Step #0:       writing top-level names to /tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info/top_level.txt
Step #0:       writing manifest file '/tmp/pip-pip-egg-info-5k_eohyx/GDAL.egg-info/SOURCES.txt'
Step #0:       Traceback (most recent call last):
Step #0:         File "/tmp/pip-install-2kmkdthm/gdal_7fd12a6a1cfc4f828e9ac25e1118c961/setup.py", line 87, in fetch_config
Step #0:           p = subprocess.Popen([command, args], stdout=subprocess.PIPE)
Step #0:         File "/usr/local/lib/python3.10/subprocess.py", line 971, in __init__
Step #0:           self._execute_child(args, executable, preexec_fn, close_fds,
Step #0:         File "/usr/local/lib/python3.10/subprocess.py", line 1847, in _execute_child
Step #0:           raise child_exception_type(errno_num, err_msg, err_filename)
Step #0:       NotADirectoryError: [Errno 20] Not a directory: 'gdal-config'

我使用的Dockerfile内容如下:

FROM python:3.10.8-buster

#update pip
RUN pip install --upgrade pip

RUN apt-get update &&\
    apt-get install -y binutils libproj-dev gdal-bin

ENV PATH $PATH:/usr/bin
ENV PATH $PATH:/usr/share/lintian/overrides/gdal-bin

ARG CPLUS_INCLUDE_PATH=/usr/include/gdal
ARG C_INCLUDE_PATH=/usr/include/gdal
RUN pip install GDAL

我自行尝试设置PATH变量但未成功。能否有人指明方向?我是否需要正确设置某些变量,或是需要额外安装组件?为何一直提示找不到gdal-config?它不应该找gdal-bin吗?


问题原因

  • 缺少GDAL开发库:仅安装gdal-bin(GDAL二进制工具)不够,Python GDAL包编译需要libgdal-dev,这个包才包含gdal-config工具。
  • PATH配置错误:/usr/share/lintian/overrides/gdal-bin不是gdal-config的路径,gdal-config实际在/usr/bin,而默认PATH已包含该目录,额外添加的PATH无效甚至干扰。
  • 变量作用域错误:用ARG定义的路径变量仅在Dockerfile构建指令阶段生效,pip install运行时需要的是环境变量,必须用ENV。
  • 缺少numpy依赖:日志提示numpy未安装,虽为可选依赖,但提前安装可确保GDAL完整功能并消除警告。

修正后的Dockerfile

FROM python:3.10.8-buster

# 更新pip
RUN pip install --upgrade pip

# 安装GDAL完整依赖,清理apt缓存减小镜像体积
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    binutils \
    libproj-dev \
    gdal-bin \
    libgdal-dev && \
    rm -rf /var/lib/apt/lists/*

# 设置环境变量,让pip获取GDAL编译参数
ENV CPLUS_INCLUDE_PATH=/usr/include/gdal
ENV C_INCLUDE_PATH=/usr/include/gdal

# 提前安装numpy
RUN pip install numpy

# 安装与系统GDAL版本匹配的Python包,避免版本冲突
RUN pip install GDAL==$(gdal-config --version)

关键说明

  • 安装libgdal-dev:这是解决gdal-config找不到问题的核心,只有这个包提供编译Python GDAL所需的配置工具和头文件。
  • 版本匹配:用gdal-config --version获取系统安装的GDAL版本,让pip安装对应版本的Python包,避免版本不兼容导致的编译失败。
  • 环境变量替换ARG:ENV定义的变量会在容器运行时生效,确保pip安装过程中能读取到GDAL的头文件路径。
  • 清理缓存:添加rm -rf /var/lib/apt/lists/*是Docker最佳实践,可大幅减小镜像体积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:29:54