我正在尝试使用 python 在 Windows 上设置带有 sqlite 数据库的应用程序,并且我需要 Spatialite 扩展。
我已下载 mod_spatialite 二进制文件。
import os; import sys
import sqlite3
spatialite_path = r"folder\with\binaries"
os.environ['PATH'] = spatialite_path + ';' + os.environ['PATH']
sys.path = [spatialite_path] + sys.path
conn = sqlite3.Connection(':memory:')
conn.enable_load_extension(True)
conn.load_extension('mod_spatialite') # fails
conn.load_extension('mod_spatialite.dll') # fails
conn.load_extension(os.path.join(spatialite_path,'mod_spatialite.dll')) #fails
os.chdir(spatialite_path); assert os.path.exists('mod_spatialite.dll'); conn.load_extension('mod_spatialite') # fails
对于所有人来说,该过程都会失败:
操作错误:找不到指定的模块。
Python 版本 3.10、sqlite3 版本 2.6、mod_spatialite 版本 5.0.1。
编辑:
这个问题似乎是 Spatialite 5.0.1 和 python 3.10.11 之间的兼容性问题
编辑#2:
上面的代码与 Spyder IDE 提供的 python 3.8.10 安装完美配合,但不适用于虚拟环境中干净的 python 3.8.10 安装。
它也适用于 ArcGIS 附带的 python 3.9.11。
尝试手动将spatialite二进制文件的路径添加到PATH环境变量中,而不是通过代码。 您可能甚至不需要
import spatialite
声明。
最后,使用第三个选项(conn.load_extension(os.path.join(spatialite_path,'mod_spatialite.dll'))
)加载扩展程序。如果这不起作用,请尝试向 load_extension
方法提供实际的字符串路径。添加到 PATH 后,请确保重新启动 IDE。
希望这有帮助
有人知道这个错误的答案吗?