我正在尝试使用Spatialite beta版本3.0因为我正在使用 64位计算机上的Windows 7。
我尝试加载时始终遇到可怕的sqlite3.OperationalError: The
specified module could not be found.
错误
libspatialite-4.dll
。
我尝试了以下内容:
libspatialite-4.dll
和所有其他dll放在同一个文件夹中'PATH'
环境变量c:\windows\system32
文件夹中的所有dll(完成重启机器)c:\windows\sysWoW64
文件夹中的所有dll(完成重启机器,这应该是32位dll,但我还是试过了)我的代码如下:
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-4.dll")')
注意 - 我也尝试了完整的路径而没有运气。我记得有 与Windows XP 32位相同的问题。我让它工作但不能 记得我做了什么:(
更新
我在32位Windows 7上测试了设置,并将所有dll放在System32文件夹中。因此,这表明64位设置存在一些问题。难道我需要另一个版本的MSVC(我不认为Spatialite网站说哪个是必要的,所以我可能只需要猜测 - 我安装了MSVC2010)?
答案 0 :(得分:2)
我遇到了同样的问题,这让我困惑了好几天。我在Windows 7(x64)上运行Python 2.6(32位),因此它可能与您的设置不同。
以下是您可以尝试的内容(取自此Google Groups post):
问题似乎是由于用户权限设置,Windows可能无法从C:\ Windows \ system32加载dll。
答案 1 :(得分:1)
我刚刚经历了pyspatialite 3.0.1 x64版本及其所有依赖库的噩梦。它可以做到,但需要一些“调整”才能做到正确。
首先,请注意在此处编译spatialite.c amalgamation可能需要的解决方法:
Pyspatialite 3.0.1 Issue #7 Comment #3
其次,我建议您使用MSVC 2008 / SDK 7.0 x64进行编译,这是Python 2.7 x64的编译方式。当我使用mingw-w64编译依赖库时,我遇到了很多麻烦,试图编译正确的东西。
iconv(v.1.9.2)和proj4(v.4.8.0)似乎都编译并安装得很好;但是,使用最新的GEOS svn_trunk(v.3.3.5)可能会遇到麻烦。请注意以下关于变通方法/修复程序的链接......
如果从577下载两个makefile,则它们包含574中的修复程序。
您还需要下载其中一个夜间快照,并在编译之前将geos / src / triangulate目录复制到您的构建文件夹,因为它在svn_trunk中缺失。
最后,您需要对geos / src / dirlist.mk进行一些小修改:
在第45行,在“简化”下方和“util”上方添加“triangulate”(无引号)。
现在编译时,您可能会看到一些警告,但构建不应该彻底失败......
nmake /f makefile.vc PREFIX=../Path/To/Geos/Install/Here
nmake install /f makefile.vc PREFIX=../Path/To/Geos/Install/Here
它会处理你的lib依赖项。现在你需要做两件事之一: 1.在pyspatialite构建文件夹中创建setup.cfg文件并添加/ bin,/ lib和/ include路径,或者 2.直接编辑pyspatialite setup.py文件并执行相同的操作。
我发现直接编辑setup.py文件最简单,并将依赖库的路径添加到类似于:
(line 45) include_dirs = ['../usr/local/include', '../python27/include']
(line 46) library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs']
(line 47) libraries = ['geos','geos_c','proj','iconv'] # You may need to add 'iconv' here
(line 48) runtime_library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs']
如果在进行这些更改之后,pyspatialite仍然无法为您构建,请对setup.py进行一组修改:在第121行附近,添加以下行...
ext.include_dirs.append('../python27/include')
ext.include_dirs.append('../usr/local/include')
ext.library_dirs.append('../python27/libs')
ext.library_dirs.append('../usr/local/lib')
ext.library_dirs.append('../python27/DLLs')
ext.library_dirs.append('../usr/local/bin')
请记住替换路径以匹配您的特定设置。应该这样做。运行'python setup.py install'后,一切都应该有效。
你可以在../Python27/Lib/site-packages/pyspatialite/test中运行所有测试 - 它们都为我而传;但是,更好,更现实的测试可能是从此链接运行示例代码:
作者进入的步骤没有详细介绍如何让依赖库在x64位环境中工作,但是我没有发现它们特别有用,因为pyspatialite 3.0.1现在自动检测到适当的版本下载的spaceite合并。站点上的示例代码创建一个spatialite数据库文件,并用数千个条目填充它。一切都为我成功;所以我相信上面概述的方法可以让pyspatialite x64构建起作用。
祝你好运!-RMWChaos
答案 2 :(得分:1)
Python中包含的sqlite3.dll
版本似乎并不想与Spatialite合作。我唯一可以上班的工作(没有从源头编译所有东西)是:
sqlite-dll-win32-x86-[version].zip
mod_spatialite-[version]-win-x86.7z
sqlite3.dll
重命名为sqlite3_old.dll
,以便Python在您的路径中使用新的<{li}>
醇>
有关详细信息,请参阅this blog post。
答案 3 :(得分:0)
我按照上一篇文章here中的说明解决了这个问题。根据上面的一些内容,我的系统是带有32位空间文件库的Win7 64位和用于python的pysqlite库。我链接到我的DLLs目录中的sqlite3.dll(这是ArcGIS安装的Python,与其他安装略有不同)。
这解决了通过pysqlite加载Spatialite 4 dll的问题。