3

我在 ubuntu 上使用 pyspatialite 没有问题——它很完美。但是 Windows 让我非常头疼。我已经尝试解决这个问题至少三天了。

我正在使用带有 mingw (gcc) 作为编译器的 Visual Studio 2010 express。我遇到并解决了很多问题:vcvarsall.bat、iconv.h等,但我实际上并不知道我到底做了什么。我为 DLL、.h 文件(头文件)、.a 文件(afaik 它与 mingw 相关)、osgeo4w 二进制文件等尝试了几个环境变量。但我无法弄清楚。

我在使用 MSVC 时收到以下错误:'gcc' failed with exit status 1并且在使用 MinGW 时:命令提示符下的很多警告行与lex.gml.c, lex.kml.c, lex.geojson.c或类似的东西有关。

我不是开发人员。我只是对开源 GIS 世界感兴趣。有谁知道“如何在 Windows 上安装 pyspatialite”的分步指南?

4

2 回答 2

11

经过大量的反复试验、谷歌搜索、键盘损坏、各种论坛/聊天问答环节和头部受伤——更不用说必须为几个问题创建自己的修复程序/解决方法——我终于成功地构建了并为 Windows x64 安装 64 位版本的 PySpatiaLite 3.0.1。呜呼!

考虑到我到达终点有多么困难(几个星期!),我想分享本教程作为对特定问题的回答,“我如何构建和安装 64 位版本的 PySpatiaLite视窗?” 与其创建一个新的自我回答的问题线程,不如只回答这个关于在 Windows 上安装 PySpatiaLite 的问题,假设它会出现在任何搜索如何在 64 位构建中执行它的人身上。所以这里...

注意: Markdown 在这个网站上的工作方式,我不能完全控制列表的编号模式;它在每个标题后重置为 1。因此,虽然在原始教程中我可能将某些东西编号为 30,但在这里我必须注意它显示为构建 xyz 等下的第 5 步。你能做什么?


操作方法:在 WINDOWS 上安装 64 位 PYSPATIALITE

在 40 个非常容易遵循的步骤中- 不,真的!


这里有很多步骤,但这仅仅是因为我将它们分解成尽可能小的组件;所以不要感到不知所措。在高层次上,你实际上只做 5 件事:

  1. 下载所有必要的资源
  2. 设置构建环境(你可能已经这样做了)
  3. 构建和安装依赖库
  4. 构建和安装 PySpatiaLite
  5. 测试您的安装

而已。没那么难,真的吗?哦,是的!但希望您遵循这些步骤并没有那么困难。对于你们中的许多人来说,这些步骤中添加的细节似乎有点过头了,特别是如果你以前是从源代码构建的(我没有——真的!),但我不对观众的技能水平或专业知识做任何假设; 所以这个 How-To 的编写是为了让一个相对的初学者(比如我!)应该能够遵循它。

注意:请注意本文档中的注释,因为它们经常指出一些问题或乍一看不会很明显的事情。

注意:尽可能使用最新的稳定版本,而不是测试版或夜间快照。有时,您别无选择,只能抓住最前沿的 beta 版本(如果您认识人,也可以是 alpha 版本)。例如,您将需要 GEOS 的最新稳定版本夜间构建来解决问题。

注意:当您访问下面的一些链接时,您可能会注意到您打算构建的其他库的一些预编译二进制文件。我强烈建议你不要使用这些。您无法确定它们是在什么环境中构建的,如果您在自己的环境中构建它们,事情会更好/更安全/更确定它们会正常工作。Gettext 的例外。

ME:代表“我的环境”作为比较基础

要求:

  • 一个 Microsoft Windows x64 操作系统(Duh!我们在这里做什么?)
    我: MS Windows 7 Home x64

  • MS Visual Studio Express C++ (MSVC) 2008
    ME:我下载并安装了一个虚拟 ISO 映像,而不是使用基于 Web 的安装程序
    注意:选择“vcsetup.exe”(C++)而不是“vcssetup.exe”(C#) - 注意额外的's'?你会认为他们会让它更明显一点,是吗?完整版的 MSVC 也同样适用,但和我一样,我认为免费对您来说很有价值。
    注意:可能适用于 MSVC 2010,但我强烈建议坚持使用编译 Python 的相同版本,因为有时它可能有点棘手,这就是为什么我建议使用 MSVC 而不是 mingw-w64 或 Cygwin 构建的原因。

  • MS 软件开发工具包 (SDK) 7.0 amd64 .NET Framework 3.5
    ME:还在这里下载了 ISO 映像。
    注意:可能适用于 SDK 7.1 amd64 .NET Framework 4.0 (MSVC 2010),但请参阅上面的注释

  • Python 2.7 x64
    ME: Python 2.7.3 x64(预编译 Win x64 安装)
    注意:可能适用于 2.5+ 版本,包括 3.x

  • 最新的 GNU iconv 源代码
    ME: libiconv 1.9.2

  • 最新 Proj.4 源代码
    ME: libproj 4.8.0

  • 最新的 GEOS 源代码
    ME: libgeos 3.3.5 (svn_trunk) + 2012-07-28 nightly snapshot
    注意:也可以从这个页面下载一个 nightly snapshot;我们需要从中复制一个丢失的目录,但我们不想用它来构建库本身。

  • 最新的 GNU Gettext Runtime BINARY
    ME: Gettext 0.18.1.1-2
    注意:由于与 iconv 的循环依赖,我们在此处使用二进制文件而不是从源代码构建;你可以解决它,但这更容易/更快/更简单/更少压力。

  • 最新的 PySpatialLite 包
    ME: PySpatialLite 3.0.1
    注意:在撰写本文时,3.0.1 是可用的最新版本;让这个版本工作的特定怪癖可能不会与任何其他版本完全匹配,但编译依赖库所需的大部分步骤仍然应该适用。

  • Notepad++或其他功能齐全的编辑器应用程序。
    注意:当然,MS NotePad 会在紧要关头完成,但它会让这个过程变得更加困难。我推荐一些更强大的东西,而 Notepad++ 恰好是我的最爱。

设置构建环境:

  1. 安装 MSVC 2008,并运行 Windows 更新(有时 2 次或更多次以获取所有内容),然后当没有更新时...

  2. 安装 SDK 7.0,然后再次运行 Windows 更新(等等等等,令人作呕),然后当没有更新时......

  3. 打开 Windows 文件夹(或 Windows 资源管理器)并导航到“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC”

  4. 编辑“vcvarsall.bat”

  5. 在指示的行号处找到如下所示的代码:

    Line 19: if not exist "%~dp0bin\amd64\vcvarsamd64.bat" goto missing  
    Line 20: call "%~dp0bin\amd64\vcvarsamd64.bat"  
    
  6. 这些行中的路径是完全错误的。不要问我为什么。我猜微软那天他们的集体评估,但如果你只是删除'\amd64'并将每行中的文件名更改为'vcvars64.bat'应该没问题。最终结果应如下所示:

    Line 19: if not exist "%~dp0bin\vcvars64.bat" goto missing  
    Line 20: call "%~dp0bin\vcvars64.bat"  
    

    注意:您可以通过打开命令窗口(开始 --> 运行 --> 键入 'cmd' --> 确定)并运行以下命令来进行测试:

    c:\> vcvarsall x64  
    

    您应该得到一系列输出,说明它是“设置使用 Microsoft Visual Studio 2008 x64 工具的环境”。继续并关闭此窗口。

  7. 现在让我们测试您的 SDK 7.0 环境。单击开始 --> 所有程序 --> Microsoft Windows SDK 7.0 --> CMD Shell。如果一切正常,您应该有一个带有 黄色文本的命令行窗口。这表示 64 位环境。完美的!您现在可以关闭此窗口。
    注意:您可能想要创建 SDK 7.0 CMD Shell 的快捷方式 - 我们将在整个过程中经常使用它。

  8. 确定最终要安装依赖库的位置。如果该文件夹尚不存在,请立即创建该文件夹。记住您选择的路径,因为我们会经常提到它。为简单起见,我们将在示例代码中将此称为“\Install”或有时称为“C:\Install”。

  9. 决定在此安装过程中将临时构建文件保存在何处。这不应 您的“\Install”文件夹位于同一位置。在示例代码中,我们将其称为“\Temp”或“C:\Temp”。

  10. 将 GNU Gettext 二进制文件解压缩到“\Temp”,这应该会生成一个名为“\Temp\Gettext-0.18.1.1-2”或类似的文件夹。

  11. 将 libintl.dll 从 '\Temp\Gettext-0.18.1.1-2\bin' 复制到 '\Install\bin' (您必须自己创建 '\bin'),或者只是复制并粘贴所有 Gettext (' \bin'、''\lib' 等)子文件夹放入 '\Install'。无论哪种方式都可以正常工作。

  12. 导航到“\Install\bin”,复制“libintl.dll”并将其命名为“intl.dll”。这对于一些以不同名称查找它的库来说是必要的。现在我们准备好继续构建库了......

构建依赖库:

  1. 将每个库(Proj.4、GEOS 和 iconv)解压缩到 '\Temp' 中它们自己的文件夹中。我建议将每个文件夹重命名为简短但具有描述性的名称(例如“\Temp\Proj4”),因为一遍又一遍地输入“\Temp\Proj-4.8.0”(或更长!)会让人厌烦。

构建图标v:

  1. 打开您的SDK CMD Shell,并将目录更改为您的iconv 文件夹(例如'cd c:\temp\iconv')。

  2. 键入以下两个命令之一:

    Single-threaded static lib: (recommended)  
    c:\Temp\iconv\> nmake install /f makefile.msvc MFLAGS=-ML PREFIX=c:\Install  
    
    Multi-threaded static lib: (so far it's working for me)  
    c:\Temp\iconv\> nmake install /f makefile.msvc MFLAGS=-MT PREFIX=c:\Install  
    

    将 'c:\Install' 替换为您的 '\Install' 路径。经过很长时间进行一些神秘的 c 样式链接等之后,该过程最终将完成,并且假设您没有看到破坏构建过程的错误(例如,'cl.exe exited with status 2') - 忽略它是相对安全的无数的警告——你已经准备好继续前进了。
    注意:如果您愿意,您可以通过在“nmake”之后立即删除“install”然后重新运行上述命令,分两个单独的步骤构建和安装库,但有什么意义呢?如果构建部分失败,它无论如何都不会安装。

建设项目 4:

  1. 仍然在 CMD Shell 中,将目录更改为您的 '\Temp\Proj4' 文件夹(例如,'cd c:\temp\proj4')。

  2. 键入以下命令:

    c:\Temp\proj4\> nmake install-all /f makefile.vc INSTDIR=c:\Install  
    

    将 'c:\Install' 替换为您的 '\Install' 路径。
    注意:此处生成文件的扩展名现在是“.vc”而不是“.msvc”。两者似乎都是常见的做法。
    注意:注意这里是'nmake install-all ...',它比'nmake install ...'更常见,特别是因为'install'是一个不应被覆盖的内置nmake命令。
    注意:这是我见过使用“INSTDIR=”而不是“PREFIX=”的唯一实例。这本身并没有错,只是不是我见过的最常用的标准约定。
    不要担心任何消息,例如“系统找不到指定的文件。已复制 0 个文件。安装脚本非常基本,即使您没有选择编译它们,它也会尝试安装所有 .DLL 和其他文件。
    很短的时间后,该过程将完成(再次,错误严重,警告正常),您可以继续。

构建 GEOS:

  1. 这将需要一些额外的时间和精力。还记得您下载了最新的稳定版本每晚的 snapshop 吗?如果您还没有,请继续将两者解压缩到单独的文件夹(例如,'\Temp\GEOS' 和'\Temp\GEOSnap')。

  2. 将文件夹“\Temp\GEOSnap\src\triangulate”复制到“\Temp\GEOS\src”。出于某种原因,在撰写本文时,最新的稳定版本中缺少 '\triangulate'。这就是我们所需要的'\GEOSnap';继续...

  3. 将GEOS\makefile.vc 补丁下载到 '\Temp\GEOS\makefile.vc'。- 说谢谢。'

  4. 将GEOS\src\makefile.vc 补丁下载到 '\Temp\GEOS\src\makefile.vc'。- 别客气。
    注意:不要把这两者混为一谈!如果你这样做,对你来说会很糟糕。
    除了实施 GEOS Trac #574 的修复之外,这两个用于 MSVC 的 makefile 添加代码以执行基本的安装和卸载功能(例如,'nmake install-all ...')。否则,您将需要手动复制所有文件(到处都是!)或使用其他构建方法,例如 CMake,这目前有点狡猾。

  5. 导航到“\Temp\GEOS\src”,编辑“dirlist.mk”,并在指示的行号处添加以下代码:

    Line 45: triangulate \  
    

    此条目应低于“简化\”并高于“实用程序”。保存并关闭。

  6. 打开您的 CMD Shell,并将目录更改为您的 '\Temp\GEOS' 文件夹(例如,'cd c:\Temp\GEOS')。

  7. 键入以下命令:

    c:\Temp\GEOS\> nmake install-all /f makefile.vc PREFIX=c:\Install  
    

    将“c:\Install”替换为“\Install”路径。经过很长很长时间,构建过程将完成。假设没有构建中断错误,您应该会收到 GEOS 安装在“\Install”中的通知。
    这就是依赖库的全部内容;现在你(终于)准备好安装 PySpatiaLite 了!

构建和安装 PySpatiaLite:

  1. 将 PySpatiaLite 提取到其自己文件夹中的“\Temp”(例如“\Temp\PSL”)。

  2. 导航到“\Temp\PSL”,编辑名为“setup.py”的文件,并在指示的行号处修改以下代码:

    Line 45: include_dirs = ['c:\Install\include']  
    Line 46: library_dirs = ['c:\Install\libs']  
    Line 47: libraries = ['geos','geos_c','proj','iconv']  
    Line 48: runtime_library_dirs = ['c:\Install\bin']  
    

    将上面的 'c:\Install' 部分替换为您自己的 '\Install' 路径,但保持 '\include'、'\libs' 和 '\bin' 部分不变。保存并关闭文件。
    注意:您只是在第 47 行添加“,'iconv'”。

  3. 打开您的 CMD Shell 并将目录更改为您的 PySpatiaLite 文件夹(例如 'cd c:\Temp\PSL')。

  4. 键入以下命令:

    c:\Temp\PSL\> python setup.py build  
    

    等待它下载空间合并,卸载它需要的文件,开始构建过程,最终失败。
    是的。这是正确的。构建可能会失败(除非 Loki 在您阅读本文时已解决此问题)。

  5. 如果它确实失败了,请查看失败消息上方大约 14 行的控制台输出,您应该会看到隐藏在那些肮脏的代码中,例如:

    -DVERSION = "3.0.1"  
    

    记下该号码;您将在未来的几个地方需要它。

  6. 最小化 CMD Shell,导航到“\Temp\PSL\amalgamation”,然后编辑标记为 spatialite.c 的文件。不要恐慌!它很大,很糟糕,很可怕,但我们只会做一个很小的改变:一个笨拙但有效的解决方法。

  7. 在指示的行号处添加以下代码:

    Line 54: #define VERSION "3.0.1"  
    

    注意:将“3.0.1”替换为您在上面第 30 步(此处为 5)中看到的数字,并确保使用双引号 (") 而不是单引号 ('),否则它将失败。是的,我发现了困难的方式,不像你们那里的c大师谁知道得更好。
    如果您想知道为什么我们必须等待它失败才能进行此更改,这是因为文件在您的系统上不存在,直到合并下载期间第一次构建尝试。就这样。

  8. 现在重新运行上面第 31 步中的命令,构建应该成功完成。

  9. 现在运行以下命令:

    c:\Temp\PSL\> python setup.py install  
    

    和鲸鱼!假设没有更多麻烦的错误,您终于完成了构建/安装过程。吃一块饼干,拍拍自己的背。如果您愿意,您现在可以删除所有这些“\Temp”文件夹。现在进行一些测试以确保一切正常...

测试您的 PySpatiaLite x64 安装:

  1. 打开一个 CMD 窗口并将目录更改为 '..\Python27\Lib\site-packages\pyspatialite\test'(例如 'cd c:\python27...\test')。

  2. 不要启动 Python CLI。连续键入以下每个命令:

    c:\python27\...\test\> python dbapi.py  
    c:\python27\...\test\> python dump.py  
    c:\python27\...\test\> python factory.py  
    c:\python27\...\test\> python hooks.py  
    c:\python27\...\test\> python regression.py  
    c:\python27\...\test\> python spatial.py  
    c:\python27\...\test\> python transactions.py  
    c:\python27\...\test\> python types.py  
    c:\python27\...\test\> python userfunctions.py  
    

    每次测试后,您应该会收到一份报告,说明它在 x.xxx 秒内运行了 xx 次测试,以及测试是通过(OK)还是失败。如果他们都通过了,你就是金子。
    注意: “spatial.py”可能会失败,因为它期望 SpatiaLite 版本为“2.3.1”,而您的可能是“3.0.1”。不用担心,文件的简单编辑将解决此问题并允许您运行测试。

  3. 编辑“spatial.py”并将“2.3.1”更改为您实际安装的版本(还记得上面第 30 步(构建 PySpatiaLite - 第 5 步)中的那个数字吗?)在指示的行号处:

    Line 18: self.assertEqual(row[0], "3.0.1")  
    

    再次运行“spatial.py”测试,它现在应该可以正常工作了。不太确定他们为什么要在这个测试中检查 pyspatialite 版本......继续前进!

    内置测试很好,但更面向现实世界的测试怎么样?您知道,您在其中实际创建、填充、轮询和操作数据库中的数据吗?是的,这听起来就像门票!

  4. 滚动到在线 Spatialite Cookbook 的Language Bindings: Python部分的底部,并将“spatialite_sample.py”代码复制到新的 Python 文件中(例如“psl_sample.py”)。

  5. 在保存、关闭和运行此测试之前,请检查可能的复制/粘贴错误。确保代码在指示的行号处完全像这样读取:

    Line 28: sql = "SELECT AddGeometryColumn('test_pt', "  
    Line 29: sql += "'geom', 4326, 'POINT', 'XY')"  
    

    我猜在从 HTML 代码到 Python 文件的翻译中会丢失一些东西,因为每次我剪切/粘贴这段代码时,第 28 行的结尾空格和引号都会掉到第 29 行的开头,并且来自多个来源, 也。容易修复,寿。

  6. 现在保存、关闭并运行它。我真的必须向您展示如何做到这一点吗?来吧!如需提示,请查看第 35 步(此处为第 2 步)。;-)
    假设所有测试都通过了,包括内置和说明书示例,那么所有迹象都表明您拥有可靠的 64 位 PySpatiaLite 安装。

  7. 庆祝!(需要将其四舍五入到 40 ;-))

我希望这个“小”HOW-TO 对您有用。请随时提供反馈/更新/更正。

此致,

-RMWChaos,你友好的邻居邪恶霸主

http://www.thedarklands.com

于 2012-08-03T00:46:49.630 回答
0

忘记尝试构建自己的可执行文件!

只需使用来自 OSGeo4W 的现有可执行文件。

  1. 安装 OSGeo4W
  2. 在此应用程序下,您将找到 Python27 的副本和一个空间站点包
  3. 将站点包复制到您自己的 Python 副本
  4. 将 OsGeo4W/bin 目录中的所有 DLL 复制到 Python 副本中的新文件夹中,例如 binosgeo4w
  5. 将新文件夹 binosgeo4w 添加到系统路径

我不知道需要哪个 DLL,但需要其中一个来支持站点包。然后我能够从http://www.gaia-gis.it/spatialite-2.4.0-4/splite-python.html运行测试脚本

于 2014-11-06T23:39:05.550 回答