7

我正在尝试spatialite在 Windows 7 上同时使用 Python 2 和 3。

我没有尝试pyspatialite为 Python 3 打补丁,而是决定使用Python 内置包的load_extension方法,类似于这里的做法: Sqlite load_extension fail for spatialite in Python和这里:Use spatialite extension for SQLite on Windowssqlite3

但是,在官方 (C)Python 2.7 安装程序中,由于load_extension与 MacOS 相关的问题而被禁用。这不是与 Python 3.4 对应的。此外,两个安装程序都没有SQLITE_ENABLE_RTREE=1(我也想拥有)。

起初,对于 Python 2.7,一种解决方法是构建pysqlite调整设置文件以同时具有 R*Tree 和扩展。这种方式不适用于 Python 3,因为当前的setup.py. 据我了解,这是因为该包已移至核心 Python 存储库:https ://github.com/ghaering/pysqlite/issues/72#issuecomment-94319589

我当前的解决方案是使用包所需的设置重新构建 Python 2.7 和 3.4 sqlite3。它起作用了,我能够spatialite作为扩展加载并创建 R*Tree。

它是否存在替代的更简单的解决方案?setup.py有人通过研究pyspatialiteor找到了替代解决方案pysqlite吗?

4

1 回答 1

4

有一个更简单的解决方案,我刚刚开始工作。我正在使用默认 sqlite3 包和 Spatialite 4.3 运行带有 Python 3.5 的 Windows 10。

我是这样做的:

让我们从一个加载 spatialite 扩展(我们还没有安装)的简单程序开始:

import sqlite3

with sqlite3.connect(":memory:") as conn:
    conn.enable_load_extension(True)
    conn.load_extension("mod_spatialite")

如果你运行这个程序,你会得到:

C:\> python test.py
Traceback (most recent call last):
  File "test2.py", line 5, in <module>
    conn.load_extension("mod_spatialite")
sqlite3.OperationalError: The specified module could not be found.

这意味着它找不到mod_spatialite扩展名。让我们从Spatialite 网站下载它。在底部有指向“MS Windows 二进制文件”的链接。我选择了 x86 版本,当前的稳定版本,并下载了名为mod_spatialite-4.3.0a-win-x86.7z. 将该文件解压缩到 test.py 文件所在的同一目录,现在运行程序不会产生任何错误(即它可以工作!):

C:\> python test.py
C:\> 
于 2017-01-29T15:24:42.873 回答