在 Windows 上对 SQLite 使用 spatialite 扩展
Use spatialite extension for SQLite on Windows
我知道以前有人以类似的方式问过这个问题。但是,我发现的所有问题都涉及一些非常具体的系统设置,这些设置不适用于我(因为我也是)。
系统:
- 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.
我还可以尝试什么来完成这项工作?
您的 PATH 中可能没有放置 libspatialite-2.dll 的文件夹。
也许您可以从 Python 脚本中添加文件夹(我不知道任何 Python)。
或者您可以从 Windows 属性界面添加它。
顺便说一句,您使用的是非常旧版本的 spatialite:请在此处查看更新版本:
https://www.gaia-gis.it/fossil/libspatialite/index
我最近在使用 mod_spatialite.dll
Spatialite 5.0.1、Python 3.8(使用 Anaconda)和 Windows 10 时遇到了这个问题。我通过以下步骤解决了这个问题:
- 已安装 OSGeo4W;
- 已将
OSGeo4W64\bin
中的所有文件和文件夹复制到 anaconda3\Library\bin
( 没有 替换现有文件,因为这可能会破坏 Python 安装)。我事先备份了这个文件夹,这样我就可以撤消所有内容,以防出现问题;
- 已将
mod_spatialite.dll
(我已经下载)复制到 anaconda3\Library\bin
。
我认为我遇到这个问题的原因是因为缺少递归 dll 依赖项;因为只是获取直接依赖项(通过 dumpbin /dependents mod_spatialite.dll
)并将它们复制到 anaconda3\Library\bin
文件夹并没有解决问题,所以我得出的结论是我缺少某个依赖项的依赖项。鉴于所有依赖项都已经整齐地放置在 OSGeo4W64\bin
中,从那里复制所有内容为我解决了它。
我知道以前有人以类似的方式问过这个问题。但是,我发现的所有问题都涉及一些非常具体的系统设置,这些设置不适用于我(因为我也是)。
系统:
- 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.
我还可以尝试什么来完成这项工作?
您的 PATH 中可能没有放置 libspatialite-2.dll 的文件夹。 也许您可以从 Python 脚本中添加文件夹(我不知道任何 Python)。 或者您可以从 Windows 属性界面添加它。
顺便说一句,您使用的是非常旧版本的 spatialite:请在此处查看更新版本: https://www.gaia-gis.it/fossil/libspatialite/index
我最近在使用 mod_spatialite.dll
Spatialite 5.0.1、Python 3.8(使用 Anaconda)和 Windows 10 时遇到了这个问题。我通过以下步骤解决了这个问题:
- 已安装 OSGeo4W;
- 已将
OSGeo4W64\bin
中的所有文件和文件夹复制到anaconda3\Library\bin
( 没有 替换现有文件,因为这可能会破坏 Python 安装)。我事先备份了这个文件夹,这样我就可以撤消所有内容,以防出现问题; - 已将
mod_spatialite.dll
(我已经下载)复制到anaconda3\Library\bin
。
我认为我遇到这个问题的原因是因为缺少递归 dll 依赖项;因为只是获取直接依赖项(通过 dumpbin /dependents mod_spatialite.dll
)并将它们复制到 anaconda3\Library\bin
文件夹并没有解决问题,所以我得出的结论是我缺少某个依赖项的依赖项。鉴于所有依赖项都已经整齐地放置在 OSGeo4W64\bin
中,从那里复制所有内容为我解决了它。