[英]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.dylib
和file $(which python3)
,它應該顯示兩者支持的 CPU 架構。
如果兩者不匹配,則必須重新安裝其中之一。 請注意,如果您重新安裝 Python,您還必須重新安裝所有帶有 C 擴展名的 Python 包。
如果您不需要它在 M1 上本地運行,請考慮使用 Linux 虛擬機。
我對這個問題的最終解決方案是在我的 M1 Mac 上使用 Canonical 的 Multipass 創建一個 Ubuntu VM,然后像安裝 Linux 一樣安裝 postgresql、postgis 和包括 GDAL 在內的所有相關依賴項。
我使用以下內容來安裝 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.