Ubuntu hirsute/impish下pip显示gdal已安装却无法导入问题
Ubuntu高版本(hirsute/impish)pip安装GDAL成功但导入失败问题
问题现象
- 在ubuntu:focal版本上可用的Python GDAL安装步骤,在ubuntu:hirsute、ubuntu:impish版本执行时,pip会提示GDAL安装成功,但导入时会抛出
ModuleNotFoundError,focal版本无此问题。 - 基于ubuntu:hirsute构建Docker镜像安装GDAL时,安装过程无报错,pip也识别到GDAL已安装,执行Python代码导入GDAL时抛出如下错误:
=> ERROR [6/6] RUN python3 /src/test_gdal.py 0.3s ------ > [6/6] RUN python3 /src/test_gdal.py: #10 0.305 Traceback (most recent call last): #10 0.305 File "/src/test_gdal.py", line 1, in <module> #10 0.305 import gdal #10 0.305 ModuleNotFoundError: No module named 'gdal'
复现方法
将以下两个文件放在同一目录下,在目录内执行docker build .命令即可复现问题:
- test_gdal.py
import gdal
- Dockerfile
FROM ubuntu:hirsute SHELL ["/bin/bash", "-c"] RUN apt-get update -y && \ apt-get install -y python3.9 && \ apt-get install -y pip RUN apt-get update && \ apt-get install -y gdal-bin && \ apt-get install -y libgdal-dev RUN pip install gdal COPY . /src RUN python3 /src/test_gdal.py
解决方案
根因
Ubuntu 21.04(hirsute)、21.10(impish)官方源内置的GDAL版本为3.2+,该版本开始Python绑定的官方导入规则发生变更,同时pip默认安装的GDAL包路径与系统libgdal-dev的安装路径不匹配,导致模块无法被Python识别。
修复方式
方案1(推荐):调整导入语句
遵循GDAL 3.0+的官方导入规范,将test_gdal.py中的导入代码修改为:
from osgeo import gdal
方案2:安装与系统版本匹配的GDAL包
修改Dockerfile中的pip安装步骤,指定安装和系统libgdal版本一致的Python包:
RUN export GDAL_VERSION=$(gdal-config --version) && \ pip install gdal==${GDAL_VERSION}
方案3:兼容旧版导入写法
如果必须保留import gdal的旧写法,额外安装兼容包即可:
RUN pip install gdal-const
内容的提问来源于stack exchange,提问作者Adair
相关产品推荐
相关产品推荐

