簡體   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