
[英]Syntax Error while trying to create database using gpx2spatialite_create_db
[英]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 *树。
它是否存在替代的更简单的解决方案? 有人通过处理pyspatialite
或pysqlite
的setup.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.