无法找到SpatiaLite库。 Django

5
我正在尝试使Django的SQLite3接受空间查询。此教程建议我将以下内容添加到设置中:
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。

谢谢。
5个回答

6
有趣的是,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位版。
其他关于此问题的帖子有很多不同的答案:

2
我在这上面花了好几个小时,所以非常感谢!截至2019年7月9日,在Python 3.7.3上您的解决方案仍然有效。此外,我正在使用conda而不是venv - vitale232

2
在Ubuntu18.04上,如果安装了libsqlite3-mod-spatialite,添加SPATIALITE_LIBRARY_PATH = 'mod_spatialite.so'可以解决问题。
注意:答案中有mod_spatialite,但对我来说mod_spatialite.so有效。

0

以下是如何在Python 3的virtualenv中(几乎)安装SpatiaLite:

  1. 下载cyqlite,这是一个特殊的SQLite版本,启用了R-Tree。它是GoeDjango所需的
  2. 下载mod_spatialite(Windows二进制文件在页面底部的粉色框中),例如:mod_spatialite-[version]-win-x86.7z
  3. 将mod_spatialite文件解压缩(展平树形结构并忽略存档中的文件夹),放入virtualenv的Scripts文件夹中。

我不喜欢这一部分,但我找不到不涉及主Python3安装的可行解决方案。

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

致敬:https://gis.stackexchange.com/a/169979/84121


0

当我尝试在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上,使用安装了libsqlite3-mod-spatialite的SPATIALITE_LIBRARY_PATH ='mod_spatialite'对我有效。注意:我的解决方案是使用了mod_spatialite。 - Hassan Raza

-2

如何在Windows操作系统(如7、8、10)中正确激活Virtual Django环境中的Spatialite

我希望我的答案能够保障那些使用Django默认提供的Sqlite来管理地理数据的开发者朋友们,通过Python(3或更高版本)默认提供的扩展程序Spatialite链接。我假设您已经预先配置好了虚拟环境。首先要做的是下载两个zip文件:sqlite-dll-win32-x86-[version].zipmod_spatialite-[version]-win-x86.7z,并将它们解压到同一个目录中(如果有冲突,请覆盖)。

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

如果需要,重新启动计算机,停用并重新启用您的虚拟环境,然后开始编码...


这似乎是对 https://pythongisandstuff.wordpress.com/2015/11/11/python-and-spatialite-32-bit-on-64-bit-windows/ 的不完整改写,遗漏了重要细节。没有必要重新启动任何东西。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接