【问题标题】:"Unable to locate the SpatiaLite library." Django“无法找到 SpatiaLite 库。”姜戈
【发布时间】:2017-02-08 19:21:18
【问题描述】:

我正在尝试让 Django 的 SQLite3 接受空间查询。 This tutorial 建议我将其添加到设置中:

SPATIALITE_LIBRARY_PATH = 'mod_spatialite'

产生此错误的原因:

django.core.exceptions.ImproperlyConfigured:无法加载 SpatiaLite 库扩展“mod_spatialite”因为:指定 找不到模块。

我也试过这样做:

SPATIALITE_LIBRARY_PATH = r'C:\\Program Files (x86)\\Spatialite\\mod_spatialite-4.3.0a-win-x86\\mod_spatialite-4.3.0a-win-x86\\mod_spatialite.dll'

如果我不添加此变量,我在迁移时会收到此错误:

django.core.exceptions.ImproperlyConfigured:无法找到 SpatiaLite 库。确保它在您的库路径中,或设置 SPATIALITE_LIBRARY_PATH 在您的设置中。

谢谢你..

【问题讨论】:

    标签: python django sqlite spatial geodjango


    【解决方案1】:

    有趣的是,5 天后我遇到了同样的问题。经过一番摸索,我得到了它的工作:

    设置

    SPATIALITE_LIBRARY_PATH = 'mod_spatialite'
    

    并从 mod_spatialite-x.x.x-win-x86.7z 中提取所有 DLL 文件到您的 Python 安装目录。 dll 显然需要与 python.exe 在同一个文件夹中。另外我想 mod_spatialite 包根据您的 python 安装需要 32/64 位。如果您缺少某些 dll,无论缺少哪个 dll 文件,您都会收到相同的错误“未找到指定模块”,因此有点误导。

    http://www.gaia-gis.it/gaia-sins/下载

    我使用 mod_spatialite 稳定版 4.3.0a x86 和 Python 3.5.2 32 位。

    关于同一问题的其他主题以及各种答案:

    【讨论】:

    • 我在这上面花了几个小时,所以谢谢!!截至 2019 年 7 月 9 日,您的解决方案仍然适用于 Python 3.7.3。另外,我使用的是conda 而不是venv
    【解决方案2】:

    这是在 Python 3 的 virtualenv 中(几乎)安装 SpatiaLite 的方法:

    1. 下载 cyqlite 启用 R-Tree 的特殊 SQLite 构建。是required by GoeDjango
    2. 下载mod_spatialite(Windows 二进制文件位于页面底部的粉红色框中)即mod_spatialite-[version]-win-x86.7z
    3. 将 mod_spatialite 文件(将树展平并忽略存档中的文件夹)解压缩到 deverelenv Scripts 文件夹中。

    这部分我不喜欢,但如果不接触主要的 Python3 安装,我找不到可行的解决方案。

    1. 重命名或备份c:\Python35\DLLs\sqlite3.dll
    2. cyqlite uznip sqlite3.dll 文件到c:\Python35\DLLs\

    荣誉:https://gis.stackexchange.com/a/169979/84121

    【讨论】:

      【解决方案3】:

      如何在 WINDOWS 操作系统(如 7、8、10)中的虚拟 DJANGO 环境中正确激活 SPATIALITE

      我希望我的回答能够保障我的开发者朋友的安全,他们使用 django 中默认提供的 Sqlite 来通过 spatialite 链接管理他们的地理数据,这是 python(3 或 +)中默认提供的扩展。我从您有一个预配置的虚拟环境这一事实开始。首先要下载两个zip:sqlite-dll-win32-x86-[version].zipmod_spatialite-[version]-win-x86.7z并解压到同一个目录下(如果有冲突则覆盖)

      将所有之前解压缩的文件复制到您的目录中,并将它们粘贴到您的虚拟环境的 Scripts 目录中

      如有必要,这一切都重新启动您的电脑,停用并重新激活您的虚拟环境和代码...

      【讨论】:

      【解决方案4】:

      在 Ubuntu18.04 上, 添加SPATIALITE_LIBRARY_PATH = 'mod_spatialite.so' 安装了libsqlite3-mod-spatialite 对我有用。

      注意:答案是 mod_spatialite,而对我来说 mod_spatialite.so 有效。

      【讨论】:

        【解决方案5】:

        我在尝试在 AWS Elastic Beanstalk 上部署 GeoDjango 时遇到了这个问题。结果我需要将SPATIALITE_LIBRARY_PATH = 'mod_spatialite.so' 设置为SPATIALITE_LIBRARY_PATH = 'libspatialite.so'(从我的.ebextensions 运行sudo yum install libspatialitesudo yum install libspatialite-devel 后安装在/user/lib64/libspatialite.so)。

        【讨论】:

        • 在 Windows 上,添加 SPATIALITE_LIBRARY_PATH = 'mod_spatialite' 并安装 libsqlite3-mod-spatialite 对我有用。注意:答案是 mod_spatialite 对我有用。
        猜你喜欢
        • 1970-01-01
        • 2020-08-17
        • 2021-03-05
        • 2017-01-14
        • 2014-09-20
        • 1970-01-01
        • 2011-01-27
        • 2016-01-06
        • 2014-06-02
        相关资源
        最近更新 更多