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

4zcjmb1e  于 2023-05-19  发布在  Python
关注(0)|答案(1)|浏览(291)

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

  • macOS 12.6
  • Python 3.11.2
  • 简体中文
  • Homebrew 4.0.10

我也在使用ZSH。
我设法正确地安装GDAL(显然)以下指南:https://mits003.github.io/studio_null/2021/07/install-gdal-on-macos/
在 Monterey ,我的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/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)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_gdal'

我怀疑它与Python版本冲突有关,但我无法解决这个问题。
有什么建议吗?:)
先谢谢你了

yyhrrdl8

yyhrrdl81#

我终于解决了这个问题。这个问题与Python和GDAL架构CPU之间的不兼容有关(参见M1 Mac - GDAL Wrong Architecture Error [Django])。
为了解决这个问题,您需要在安装python绑定的过程中指定体系结构(参见(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')))。
在我们的例子中,第一步是卸载当前版本的python gdal:

pip uninstall gdal

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

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

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

python3 -c "from osgeo import gdal"

瞧!

相关问题