繁体   English   中英

M1 Mac - GDAL 错误的架构错误 [Django]

[英]M1 Mac - GDAL Wrong Architecture Error [Django]

我正在尝试启动并运行一个 django 项目,这取决于 GDAL 库。 我正在开发基于 M1 的 mac。

按照官方 Django 文档的说明,我已经通过 brew 安装了必要的包

$ brew install postgresql
$ brew install postgis
$ brew install gdal
$ brew install libgeoip

gdalinfo --version运行良好并将版本显示为3.3.1

gdal-config --libs返回此路径: -L/opt/homebrew/Cellar/gdal/3.3.1_2/lib -lgdal

一个符号链接也放置在自制软件的 lib 目录中,该目录位于我的路径 env 变量中。

当我尝试在不指定 gdal 库路径的情况下运行 django 时,它抱怨它找不到 GDAL 包(即使该库是可访问的,因为它的符号链接可通过路径 env 变量获得)。

当我尝试使用GDAL_LIBRARY_PATH指定 GDAL 库的路径时,我收到此错误:

OSError: dlopen(/opt/homebrew/Cellar/gdal/3.3.1_2/lib/libgdal.dylib, 6): no suitable image found.  Did find:
    /opt/homebrew/Cellar/gdal/3.3.1_2/lib/libgdal.dylib: mach-o, but wrong architecture
    /opt/homebrew/Cellar/gdal/3.3.1_2/lib/libgdal.29.dylib: mach-o, but wrong architecture

Ps 我已经看过这个答案,但它没有帮助。

当我尝试运行 gdalinfo 它运行良好但是当 django 尝试运行时它会抛出这个错误,这不是很奇怪吗? 我究竟做错了什么?

尝试使用新的 arm 版本的 python!

brew install --cask miniforge
conda init zsh
conda activate
conda install numpy scipy scikit-learn

GDAL 和 Python 可能针对不同的 CPU 架构进行编译。 在 M1 系统上,操作系统可以运行本机 arm64 和模拟 x86_64 二进制文件。

要检查:运行file /opt/homebrew/Cellar/gdal/3.3.1_2/lib/libgdal.dylibfile $(which python3) ,它应该显示两者支持的 CPU 架构。

如果两者不匹配,则必须重新安装其中之一。 请注意,如果您重新安装 Python,您还必须重新安装所有带有 C 扩展名的 Python 包。

如果您不需要它在 M1 上本地运行,请考虑使用 Linux 虚拟机。

我对这个问题的最终解决方案是在我的 M1 Mac 上使用 Canonical 的 Multipass 创建一个 Ubuntu VM,然后像安装 Linux 一样安装 postgresql、postgis 和包括 GDAL 在内的所有相关依赖项。

https://multipass.run/

我使用以下内容来安装 postgres 和 postgis:

sudo apt-get install libpq-dev #required for psycop2-binary installation
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get -y install postgresql-13 #or other version number

sudo apt install postgis postgresql-13-postgis-3

sudo -i -u postgres
createuser yourusername
createdb postgis_db -O yourusername #create your db
psql -d postgis_db
CREATE EXTENSION postgis;

#make sure these are all installed:

sudo apt-get install binutils libproj-dev gdal-bin
sudo apt-get install libgeos++
sudo apt-get install proj-bin
sudo apt-get install gdal-bin

我通过 VSCode SSH 进入 ubuntu VM 并按照惯例开发 django。 这里有一篇关于 Multipass 设置的好文章

我在 M1 上的这个设置没有问题。

我偶然发现了同样的问题,在我的情况下,它通过在 settings.py 中添加GDAL_LIBRARY_PATH以及GEOS_LIBRARY_PATH来解决

GDAL_LIBRARY_PATH = '/opt/homebrew/Cellar/gdal/3.4.1_1/lib/libgdal.dylib'
GEOS_LIBRARY_PATH = '/opt/homebrew/Cellar/geos/3.10.2/lib/libgeos_c.1.16.0.dylib'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM