macOS 12系统Python3运行GDAL脚本及导入osgeo模块报错求助
解决Python 3.11导入osgeo模块失败的问题
环境信息
- macOS 12.6
- Python 3.11.2
- GDAL 3.6.3
- Homebrew 4.0.10
- 终端:Zsh
问题情况
- 按指南安装GDAL时,针对Monterrey系统的Homebrew目录,执行了命令:
python setup.py build_ext --gdal-config /opt/homebrew/Cellar/gdal/3.6.3/bin/gdal-config - 为Zsh添加了PATH路径:
export PATH=$PATH:/Users/francescocretti/Library/Python/3.9/,但当前Python版本为3.11,重装后该目录仍为3.9 - GDAL命令行工具正常运行,
gdalinfo --version输出:GDAL 3.6.3, released 2023/03/07 - 在Python 3.11 shell中执行
import osgeo时,出现报错:Traceback (most recent call last): File "/Users/francescocretti/GDAL/GDAL-3.6.3/osgeo/__init__.py", line 30, in swig_import_helper return importlib.import_module(mname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/Cellar/python@3.11/3.11.2_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1206, in _gcd_import File "<frozen importlib._bootstrap>", line 1178, in _find_and_load File "<frozen importlib._bootstrap>", line 1142, in _find_and_load_unlocked ModuleNotFoundError: No module named 'osgeo._gdal' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/francescocretti/GDAL/GDAL-3.6.3/osgeo/__init__.py", line 46, in <module> _gdal = swig_import_helper() ^^^^^^^^^^^^^^^^^^^^ File "/Users/francescocretti/GDAL/GDAL-3.6.3/osgeo/__init__.py", line 43, in swig_import_helper return importlib.import_module('_gdal') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/Cellar/python@3.11/3.11.2_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1206, in _gcd_import File "<frozen importlib._bootstrap>", line 1178, in _find_and_load File "<frozen importlib._bootstrap>", line 1142, in _find_and_load_unlocked ModuleNotFoundError: No module named '_gdal'
解决方案
1. 清理干扰性PATH配置
打开Zsh配置文件~/.zshrc,删除之前添加的export PATH=$PATH:/Users/francescocretti/Library/Python/3.9/,保存后执行source ~/.zshrc使修改生效。这条路径指向Python 3.9的目录,会打乱Python 3.11的模块查找逻辑。
2. 用Python 3.11的pip重新安装GDAL绑定
- 先卸载可能残留的旧版本:
pip3 uninstall -y gdal - 指定Homebrew的gdal-config安装对应版本,确保用的是Python 3.11的pip:
pip3 install --global-option=build_ext --global-option="--gdal-config=/opt/homebrew/Cellar/gdal/3.6.3/bin/gdal-config" gdal==3.6.3提示:如果
pip3不是指向Python 3.11,直接用Python 3.11的完整路径执行,比如/opt/homebrew/Cellar/python@3.11/3.11.2_1/bin/pip3
3. 验证安装路径
执行pip3 show gdal,查看Location字段,确认路径是Python 3.11的site-packages目录(比如/opt/homebrew/lib/python3.11/site-packages),而非Python 3.9的目录。
4. 测试导入有效性
重新打开Python shell,执行import osgeo,无报错则安装成功。如果仍有问题,检查Python的模块搜索路径:
import sys print(sys.path)
确保输出中包含GDAL绑定所在的site-packages目录,且没有Python 3.9的干扰路径。
备选方案:直接用Homebrew安装绑定
如果手动编译安装太繁琐,可直接用Homebrew安装适配版本的GDAL Python绑定:brew install gdal-python
安装完成后,执行python3 -c "import osgeo; print(osgeo.__version__)"验证是否输出3.6.3。
内容的提问来源于stack exchange,提问作者Francesco Cretti
相关产品推荐
相关产品推荐

