【问题标题】:Use spatialite extension for SQLite on Windows在 Windows 上为 SQLite 使用空间扩展
【发布时间】:2015-03-10 13:31:20
【问题描述】:

我知道以前有人以类似的方式提出过这个问题。但是,我在这方面发现的所有问题都涉及一些非常具体的系统设置,这些设置不适用于我(因为我也是如此)。

系统:

  • Windows 7 64 位
  • Python 3.4 64 位
  • sqlite3 2.6.0(我猜是 Python 自带的)
  • Spatialite Windows 二进制文件 2.3.1 (还有什么重要的吗?)

如何激活“sqlite3”模块的spatialite 扩展?

我尝试了什么(类似问题的其他人说它有效的方式):

  • https://www.gaia-gis.it/spatialite-2.3.1/binaries.html下载:
    • libspatialite-win-x86-2.3.1.zip
    • proj-win-x86-4.6.1.zip
    • geos-win-x86-3.1.1.zip
    • libiconv-win-x86-1.9.2.zip
  • 将它们全部解压缩到 C:\ 上的同一文件夹中
  • (也尝试只将 DLL 放入该文件夹)
  • 将该文件夹放入我的系统 PATH 变量中

然后,运行

import sqlite3

conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-2.dll")')

给予

conn.execute("SELECT load_extension('libspatialite-2.dll')")
sqlite3.OperationalError: The specified module could not be found.

我还能做些什么来完成这项工作?

【问题讨论】:

  • 作为建议,将 Spatialite 文件夹放在 PATH 环境变量中的首位。我遇到了麻烦,因为 Spatialite 路径在 GDAL 之后。

标签: python windows sqlite spatialite


【解决方案1】:

您的 PATH 中可能没有 libspatialite-2.dll 所在的文件夹。 也许您可以从您的 Python 脚本中添加该文件夹(我不知道任何 Python)。 或者,您可以从 Windows 属性界面添加它。

顺便说一句,您使用的是非常旧版本的 spatialite:请在此处查看较新版本: https://www.gaia-gis.it/fossil/libspatialite/index

【讨论】:

  • 旧版本的spatialite是问题所在!在搜索 Windows 二进制文件时,Google 将我与 https://www.gaia-gis.it 上旧空间版本的子页面混淆了,这就是为什么我认为没有更多最新版本的原因。此外,库/二进制文件已从spatialite-2(/3/4).dll 重命名为mod_spatialite.dll,这让我觉得这是不同的东西。从this download page 下载mod_spatialite-4.2.0-win-amd64.7z 并将所有DLL 放入c:\Windows\system32 解决了这个问题。
  • 顺便说一下,this download page on Gaia GIS 提供 Windows 32 位二进制文​​件。在我终于找到编译好的二进制文件之前,我尝试自己编译 mod_spatialite 几乎浪费了整个工作日(不要在 Windows 上这样做:-( )-_-
  • 作为建议,将 Spatialite 文件夹放在 PATH 环境变量中的首位。我遇到了麻烦,因为 Spatialite 路径在 GDAL 之后。
【解决方案2】:

我最近在使用 Spatialite 5.0.1、Python 3.8(带有 Anaconda)和 Windows 10 时遇到了 mod_spatialite.dll 的这个问题。我通过以下步骤解决了这个问题:

  1. 已安装 OSGeo4W;
  2. OSGeo4W64\bin 中的所有文件和文件夹复制到anaconda3\Library\bin替换现有文件,因为这可能会破坏 Python 安装中的其他内容)。我事先备份了这个文件夹,这样我就可以撤消所有操作,以防万一出现问题;
  3. mod_spatialite.dll(我已经下载)复制到anaconda3\Library\bin

我认为我有这个问题的原因是因为缺少递归 dll 依赖项;因为只是获取直接依赖项(通过dumpbin /dependents mod_spatialite.dll)并将它们复制到anaconda3\Library\bin 文件夹并没有解决问题,所以我得出的结论是我缺少某些依赖项的依赖项。鉴于所有依赖项都已经整齐地放置在 OSGeo4W64\bin 中,从那里复制所有内容为我解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2010-12-31
    相关资源
    最近更新 更多