如何用Poetry安装GDAL与numpy?解决_osgeo._gdal_array导入错误
解决Poetry安装GDAL与numpy后的
_gdal_array导入错误 问题背景
使用Python 3.11开发栅格数据处理应用,依赖GDAL 3.6.2(系统已安装libgdal-dev)和numpy 1.25.1,通过Poetry管理依赖。执行栅格Band转数组代码时触发错误:
f: Band = gdal.Open("/some/file/path.tif").GetRasterBand(1) arr = f.ReadAsArray()
错误信息:
ImportError: cannot import name '_gdal_array' from 'osgeo'
已尝试调整numpy与GDAL的安装顺序、使用--no-cache参数安装,均无效,且必须使用Poetry而非pip解决。
项目pyproject.toml依赖片段:
[tool.poetry.dependencies] python = ">=3.9,<4.0" prometheus-client = "^0.14.1" gunicorn = "^20.0.4" uvicorn = {extras = ["standard"], version = "^0.18.3"} pydantic = "^2.0.3" pydantic-settings = "^2.0.2" ddtrace = "^1.16.1" matplotlib = "^3.7.2" numpy = "^1.25.1" gdal = "3.6.2"
解决方案
1. 强制GDAL编译时关联Poetry环境的numpy
激活Poetry环境后,设置编译环境变量指向当前numpy的路径,再重新安装GDAL:
poetry shell # 导出numpy头文件和库路径 export CFLAGS="-I$(python -c 'import numpy; print(numpy.get_include())')" export LDFLAGS="-L$(python -c 'import numpy; print(numpy.__path__[0])')/core/lib" # 重新安装GDAL,禁用缓存确保重新编译 poetry add gdal@3.6.2 --no-cache
2. 强制从源码编译GDAL
Poetry默认安装的GDAL预编译wheel可能缺失numpy绑定,指定从源码编译,确保编译过程检测到当前环境的numpy:
poetry add gdal@3.6.2 --no-binary gdal --no-cache
3. 自定义Poetry构建脚本辅助GDAL编译
在项目根目录创建build.py:
from setuptools import setup import numpy setup( ext_modules=[], include_dirs=[numpy.get_include()] )
修改pyproject.toml添加构建配置和依赖:
[tool.poetry.build] script = "build.py" [tool.poetry.dependencies] # 保留原有依赖,新增setuptools setuptools = "^68.0.0"
然后重新安装所有依赖:
poetry install --no-cache
4. 验证Poetry环境中numpy的有效性
先确认numpy在Poetry环境中正常可用:
poetry run python -c "import numpy; print(numpy.__version__); print(numpy.get_include())"
若numpy无法导入,先修复numpy安装:
poetry remove numpy poetry add numpy@1.25.1 --no-cache
内容的提问来源于stack exchange,提问作者AJSmyth
相关产品推荐
相关产品推荐

