Dar*_*iun 4 django homebrew geospatial gdal apple-m1
我有一台带有 M1 芯片的 MacBook,我正在尝试建立一个 django 项目。该项目与地理空间库 gdal 一起使用。我在版本 3.3.1_3 上和我的虚拟环境版本 3.3.1 中安装了 gdal 和 homebrew
如果我python manage.py migrate输入错误:
django.core.exceptions.ImproperlyConfigured:云找不到GDAL库(尝试过“gdal”,“GDAL”,“gdal3.1.0”,“gdal3.0.0”,“gdal2.4.0”,“gdal2.3.0”,“gdal2” .2.0”、“gdal2.1.0”)。是否安装了GDAL?如果是,请尝试在您的设置中设置 GDAL_LIBRARY_PATH。
通过 pip list 显示 GDAL 版本 3.1.0。Django 文档说不支持 3.3.x 版本,但我无法使用自制程序安装特定的 gdal 版本。
是否有不同的解决方案来启动并运行 django 项目?
小智 7
不幸的是,@Ameya 的建议对我不起作用,但他们确实让我在调查中走上了正确的道路。我的问题的根本原因与 python ctypes 有关,来自我使用的pyenv发行版,无法找到从homebrew安装的 GDAL 共享库。以下是我在调查过程中发现的一些其他解释。
\n以下关于 python 错误的线程提供了一些关于 Apple 半新近(?)增加的导致根本问题的安全约束的良好背景和详细信息:
\nhttps://bugs.python.org/issue43964
\npyenv 的 github 上的这篇文章提供了有关该问题的详细信息以及为什么 pyenv 没有通用解决方案:
\nhttps://github.com/pyenv/pyenv/issues/2339
\n这是一种测试您是否遇到与我相同的根本问题的方法。启动 python shell 并尝试使用 ctypes 手动加载库:
\n\n\n\xe2\x95\xb0\xe2\x94\x80\xe2\x9e\xa4 python3
\n
\nPython 3.10.8(主要,2022 年 12 月 5 日,14:59:49)[Clang 14.0.0 (clang-1400.0.29.202)]在达尔文
\n键入“帮助”、“版权”、“制作人员”或“许可证”以获取更多信息。
\n--> from ctypes.util import find_library
\n--> find_library(\'libgdal.dylib\')
如果 ctypes 找到该库,则会显示路径。如果没有找到库,则不会给出任何响应。
\n看起来 ctypes 加载器现在(?)在 macOS 上只有一组固定的路径。我使用的解决方法是简单地找到未使用的现有路径之一。然后我在那里创建了一个符号链接,指向自制程序库位置。例如,ctypes 似乎搜索 $HOME/lib 和 /usr/local/lib,这两个文件在我的计算机上都是空的(或不存在)。所以我创建了一个符号链接,如下所示:
\n\n\n\xe2\x95\xb0\xe2\x94\x80\xe2\x9e\xa4 sudo ln -s /opt/homebrew/lib /usr/local/lib
\n
或者
\n\n\n\xe2\x95\xb0\xe2\x94\x80\xe2\x9e\xa4 ln -s /opt/homebrew/lib ~/lib
\n
现在 ctypes 找到了该库,因此 django 可以正常启动:
\n\n\n\xe2\x95\xb0\xe2\x94\x80\xe2\x9e\xa4 python3
\n
\nPython 3.10.8(主要,2022 年 12 月 5 日,14:59:49)[Clang 14.0.0 (clang-1400.0.29.202)]在达尔文
\n键入“帮助”、“版权”、“制作人员”或“许可证”以获取更多信息。
\n--> from ctypes.util import find_library
\n--> find_library(\'libgdal.dylib\')
\n\'/usr/local/lib/libgdal.dylib\'
\n-->
小智 5
我碰巧拥有新的 MacBook M1 Pro,但遇到了一些问题。以下是我为解决此问题所做的步骤。
第一步:首先检查你是否安装了gdal和geos。
gdal-config --version
Run Code Online (Sandbox Code Playgroud)
如果没有显示版本,则brew install gdal在终端中运行。
第 2 步:找出 gdal 安装路径。
which gdal-config
Run Code Online (Sandbox Code Playgroud)
如果是 M1 Mac OS,则应返回此信息 -
/opt/homebrew/opt/gdal/bin
Run Code Online (Sandbox Code Playgroud)
步骤 3:检查 gdal lib 文件是否存在于以下位置。
/opt/homebrew/opt/gdal/lib/libgdal.dylib
Run Code Online (Sandbox Code Playgroud)
如果是这样,那就太好了!如果您也需要,请对 geos 执行相同的设置。
完成所有操作后,在 Django 项目的 Settings.py 中添加以下行。
GDAL_LIBRARY_PATH = '/opt/homebrew/opt/gdal/lib/libgdal.dylib'
GEOS_LIBRARY_PATH = '/opt/homebrew/opt/geos/lib/libgeos_c.dylib'
Run Code Online (Sandbox Code Playgroud)
现在应该可以了。此外,如果您已经安装并使用 PostgreSQL,它确实附带了 GDAL 和 GEOS 库,如果需要,您也可以提供这些路径。
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |