繁体   English   中英

使用Python 2和3的Spatialite

[英]Spatialite with Python 2 and 3

我试图在Windows 7上使用带有Python 2和3的spatialite

我没有尝试为Python 3修补pyspatialite ,而是决定将load_extension方法与sqlite3 Python内置包一起使用,类似于如何完成: Sqlite load_extension在Python中的spatialite失败 ,这里: 在Windows上使用SQLite的 spatialite 扩展

但是,在官方(C)Python 2.7安装程序中,对于与MacOS相关的问题, load_extension被禁用。 这与Python 3.4的对应物不同。 此外,两个安装程序都是在没有SQLITE_ENABLE_RTREE=1情况下SQLITE_ENABLE_RTREE=1 (我也希望这样)。

首先,对于Python 2.7,一种解决方法是构建pysqlite调整安装文件以同时拥有R * Tree和扩展。 这种方式对Python 3不起作用,因为当前的setup.py似乎不支持它。 据我所知,这是因为包移到了核心Python存储库: https//github.com/ghaering/pysqlite/issues/72#issuecomment-94319589

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

它是否存在替代的更简单的解决方案? 有人通过处理pyspatialitepysqlitesetup.py来找到替代解决方案吗?

我刚刚开始工作,有一个更简单的解决方案。 我正在使用默认的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:\> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM