我最近刚刚经历了 pyspatialite 3.0.1 及其所有依赖库的 x64 构建的噩梦。这是可以做到的,但需要一些“调整”才能使其正确。
首先,请注意此处编译 spatialite.c 合并可能需要的解决方法:
Pyspatialite 3.0.1 问题 #7 评论 #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) 可能会遇到一些麻烦。请注意以下解决方法/修复的链接...
OSGEO GEOS TRAC 门票 #574
OSGEO GEOS TRAC 门票 #577
如果您从 577 下载这两个 makefile,它们会在 574 中包含修复程序。
您还需要在编译前下载一个夜间快照并将 geos/src/triangulate 目录复制到您的构建文件夹中,因为 svn_trunk 中缺少它。
最后,你需要对 geos/src/dirlist.mk 做一个小的修改:
在第 45 行,在 'simplify \' 下方和 '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 中运行所有测试——它们都为我通过了;但是,更好、更实际的测试可能是运行此链接中的示例代码:
SpatiaLite 和 Python
作者进入的步骤没有涵盖让依赖库在 x64 位环境中工作的细节,但是,我发现它们并不是特别有用,因为 pyspatialite 3.0.1 现在自动检测适当版本的 spatialite 合并去下载。该站点上的示例代码创建了一个空间数据库文件,并在其中填充了数千个条目。一切对我来说都很顺利;所以我相信上面概述的方法来获得一个 pyspatialite x64 构建工作。
祝你好运!
-RMW混沌