在 macOS 12(蒙特雷)上使用 Python3 运行 GDAL 脚本时出错

问题描述 投票:0回答:1

我知道有人在其他地方问过这个问题,但我找不到适合我环境的解决方案:

  • macOS 12.6
  • Python 3.11.2
  • GDAL 3.6.3
  • 自制软件 4.0.10

我也在用 Zsh。

我设法按照本指南正确安装了 GDAL(显然):https://mits003.github.io/studio_null/2021/07/install-gdal-on-macos/

在蒙特雷,我的 Homerew 酒窖在

/opt/homebrew
所以我将说明更改为:

  • python setup.py build_ext --gdal-config /opt/homebrew/Cellar/gdal/3.6.3/bin/gdal-config

我还必须在 zsh PATH 中添加一个条目以正确定位 Python 脚本,因为在 macOS 12 上这也不同(在

/Users/username/Library/Python
而不是
/library/Python

  • export PATH=$PATH:/Users/francescocretti/Library/Python/3.9/

此时版本

3.9
听起来不对,因为我当前的 Python 版本是
3.11
但即使重新安装 Python 3.11 这个文件夹仍然保持不变。

所以无论如何我都运行了 GDAL python 脚本并且它们起作用了。事实上,如果我用

gdalinfo --version
检查 GDAL 版本,我会得到
GDAL 3.6.3, released 2023/03/07
.

问题是,如果我尝试在 python 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/[email protected]/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/[email protected]/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)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_gdal'

我怀疑它与 Python 版本冲突有关,但我无法解决问题。

有什么建议吗? :)

提前致谢

python-3.x gdal macos-monterey
1个回答
0
投票

我终于解决了这个问题。该问题与您的 python 和 GDAL 架构 CPU 之间的不兼容有关(请参阅M1 Mac - GDAL 错误架构错误 [Django])。

为了解决这个问题,您需要在安装 python 绑定时指定架构(参见 (mach-o 文件,但是是一个不兼容的架构(有 'arm64',需要 'x86_64')))。

在我们的例子中,第一步是卸载当前版本的 python gdal:

 pip uninstall gdal

第二步是通过指定 CPU 架构(在我们的例子中为 -arch arm64)重新安装 gdal:

ARCHFLAGS="-arch arm64" pip install gdal==$(gdal-config --version)  --compile --no-cache-dir

之后,您可以通过执行以下命令检查一切是否正常:

python3 -c "from osgeo import gdal"

瞧!

© www.soinside.com 2019 - 2024. All rights reserved.