(M1 Mac) Geodjango GDAL: mach-o,但是错误的架构

9

我正在尝试在Mac OS上运行GeoDjango,但是遇到了GDAL的问题。

我已经成功下载和安装了GDAL(Gdal完整二进制文件),并且也从Homebrew中安装了它。

不幸的是,当我使用Homebrew安装gdal时,django找不到gdal并抛出“gdal未找到”错误。之后,我从KyngChaos GeoDjango 二进制文件安装了它,然后django可以找到gdal,但现在却抛出以下错误:

OSError: dlopen(/Library/Frameworks/gdal.framework/gdal, 6): no suitable image found.  Did find:
    /Library/Frameworks/gdal.framework/gdal: mach-o, but wrong architecture
    /Library/Frameworks/gdal.framework/gdal: mach-o, but wrong architecture
    /Library/Frameworks/GDAL.framework/Versions/3.1/GDAL: mach-o, but wrong architecture
    /Library/Frameworks/GDAL.framework/Versions/3.1/GDAL: mach-o, but wrong architecture

我认为Kyngchaos构建不适用于ARM平台

非常感谢任何帮助。

Django版本:3.0,也尝试过3.2
Gdal版本:3.2 / 3.1 / 2.4,都尝试过
Python版本:3.8
PostgreSQL版本:13
已安装Postgis / Geos
gdal-config --libs:

-L/opt/homebrew/Cellar/gdal/3.2.2_3/lib -lgdal

实际上,Homebrew成功安装了arm版本,但Django找不到hombrew gdal包,这就是为什么我尝试KyngChaos构建的原因。 - Veli Eroglu
这就是当我移除KyngChaos构建时发生的情况;django.core.exceptions.ImproperlyConfigured: 找不到GDAL库(尝试了"gdal","GDAL","gdal3.1.0","gdal3.0.0","gdal2.4.0","gdal2.3.0","gdal2.2.0","gdal2.1.0","gdal2.0.0")。是否已安装GDAL?如果已安装,请尝试在设置中设置GDAL_LIBRARY_PATH。 - Veli Eroglu
1
肮脏的解决方案,保留正确的架构 arm64 并将其添加到您的 Django settings.py 中 GDAL_LIBRARY_PATH='/opt/homebrew/Cellar/gdal/3.2.2_3/lib/libgdal.dylib'。当然,gdalinfo --version 不应该出现错误。这不是为生产环境而设计的,因为我假设您不会在 Mac M1 上用于生产。 - rapoma
ofc不是生产环境,它能正常工作,非常感谢!(同样的步骤也需要为geos添加GEOS_LIBRARY_PATH = '/opt/homebrew/Cellar/geos/3.9.1/lib/libgeos_c.dylib'到settings.py) - Veli Eroglu
8
如果有人遇到AttributeError: dlsym(0x102dde9f0, initGEOS_r): symbol not found错误,按照之前列出的步骤操作后,请确保GEOS_LIBRARY_PATH路径以libgeos_c.dylib结尾而不是libgeos.dylib - Leonid Ivanov
显示剩余3条评论
3个回答

2

查找gdal和geos的路径

find /opt -name "libgdal.dylib" -print 2>/dev/null
find /opt -name "libgeos_c.dylib" -print 2>/dev/null

复制gdal和geos的输出(可能不止一个,请选择一个)

/opt/homebrew/Cellar/gdal/3.6.2/lib/libgdal.dylib
/opt/homebrew/Cellar/geos/3.11.1/lib/libgeos_c.dylib

将其放入settings.py文件中

将其放入DJANGO设置文件中, 默认的设置文件在此处,但您的情况可能有所不同:

mysite
 ├── manage.py
 └── mysite
      ├── __init__.py
      └── settings.py

文件底部:
# mysite/mysite/settings.py
GDAL_LIBRARY_PATH="/opt/homebrew/Cellar/gdal/3.6.2/lib/libgdal.dylib"
GEOS_LIBRARY_PATH="/opt/homebrew/Cellar/geos/3.11.1/lib/libgeos_c.dylib"

1

dydl 还会 监视 ~/lib 文件夹,所以最简单的解决方法是:

ln -s /opt/homebrew/lib ~/lib


-3
brew info gdal

这应该会给你一些类似这样的东西:

/opt/homebrew/Cellar/gdal/3.2.2_3/lib/libgdal.dylib

将其放入您的GDAL_LIBRARY_PATH中。
从这里开始,您可以通过在异常行中设置断点来进一步调试它。

2
这个被采纳的答案真的对任何人有用吗?我仍然得到完全相同的错误。 - Milo Persic
1
不,它不起作用。 - Raja Simon
@RajaSimon,请查看问题线程中的评论,也许这些答案可以帮助你。 - Veli Eroglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接