Django项目无法找到GDAL库(M1 Mac)导入PointField模型报错如何解决?
问题原因
这个问题确实和M1芯片的架构特性强相关:M1系列Mac的Homebrew默认安装路径从Intel机型的/usr/local调整为/opt/homebrew,Django默认搜索GDAL动态库的路径没有覆盖该目录,就会出现终端能正常识别gdal-config命令,但Django运行时找不到GDAL库的异常。你已经加了路径配置但导入模型仍报错,大概率是配置读取或者架构不匹配的问题。
解决步骤
步骤1:确认GDAL、GEOS库的真实路径
终端执行以下命令获取库文件的绝对路径:# 获取GDAL库路径 find /opt/homebrew -name "libgdal.dylib" # 获取GEOS库路径 find /opt/homebrew -name "libgeos_c.dylib"正常会返回类似以下的结果:
/opt/homebrew/Cellar/gdal/3.3.1/lib/libgdal.dylib /opt/homebrew/Cellar/geos/3.10.2/lib/libgeos_c.dylib步骤2:先硬编码路径测试排除配置读取问题
先把settings.py里的路径配置改成你上一步拿到的真实路径,暂时不用config读取,避免是配置加载时机不对(比如导入模型时配置还没完成加载)或者.env文件配置错误的问题:GDAL_LIBRARY_PATH = "/opt/homebrew/Cellar/gdal/3.3.1/lib/libgdal.dylib" GEOS_LIBRARY_PATH = "/opt/homebrew/Cellar/geos/3.10.2/lib/libgeos_c.dylib"修改后测试导入Address模型,如果不再报错,说明是你之前的
config读取逻辑有问题,检查.env文件里的路径是否正确,或者调整配置加载的优先级。步骤3:检查Python架构是否匹配
如果硬编码后仍然报错,检查你当前用的Python是否为ARM架构版本,x86转译版本的Python只会搜索/usr/local下的库,无法识别/opt/homebrew下的ARM架构GDAL库。终端执行以下命令确认:python3 -c "import platform;print(platform.machine())"返回
arm64为正常M1架构版本,返回x86_64说明是Rosetta转译的x86版本,重新安装ARM架构的Python即可解决。步骤4:升级Django版本适配M1架构
低于3.2版本的Django对M1芯片的GDAL路径适配不完善,可升级到最新LTS版本优化兼容性:pip install django --upgrade
内容的提问来源于stack exchange,提问作者SeongEon Jo

