【问题标题】:M1 Mac - GDAL Wrong Architecture Error [Django]M1 Mac - GDAL 错误的架构错误 [Django]
【发布时间】:2021-10-04 06:10:18
【问题描述】:

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

按照official Django docs 上的说明,我已经通过 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

附:我已经看过this answer,但没有帮助。

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

【问题讨论】:

  • 您是否设法找到了答案,因为我偶然发现了同样的事情。
  • 也有同样的问题,有更新吗?
  • 对不起,我已经离开 stackoverflow 很长一段时间了。我们最终使用rosetta2 运行它。今天又在另一台m1机器上安装,看看有没有变化。

标签: python python-3.x django gdal apple-m1


【解决方案1】:

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 包。

【讨论】:

    【解决方案2】:

    尝试使用新的arm版本python!

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

    【讨论】:

      【解决方案3】:

      如果您不需要它在 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 虚拟机,并像往常一样开发 django。有一篇关于 Multipass 设置的好文章 here.

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

      【讨论】:

        猜你喜欢
        • 2021-11-28
        • 2022-10-25
        • 1970-01-01
        • 1970-01-01
        • 2022-08-24
        • 2022-10-24
        • 1970-01-01
        • 2016-01-20
        • 2022-07-10
        相关资源
        最近更新 更多