【问题标题】:Installation of Pyspatialite on Windows在 Windows 上安装 Pyspatialite
【发布时间】:2012-05-29 19:56:29
【问题描述】:

我在 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”的分步指南?

【问题讨论】:

  • 我自己也在寻找同样的东西,特别是对于 64 位版本。到目前为止,我找到了一个关于如何编译 64 位空间的很棒的教程,但没有关于安装 pyspatialite 的明确说明。如果您发现了什么,请在此处发布。 pyspatialite wiki 仅说明了所需的库是什么,但我自己在 python setup.py 构建过程中遇到了失败状态。谢谢,-R

标签: python visual-c++ mingw spatialite


【解决方案1】:

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

考虑到我到达终点有多么困难(几个星期!),我想分享这个 教程作为对“如何构建和安装 64 位版本的 Windows 上的 PySpatiaLite?”我认为不是创建一个新的自我回答问题线程 最好只回答这个关于在 Windows 上安装 PySpatiaLite 的问题,假设它 也会出现在任何搜索如何在 64 位构建中执行此操作的人面前。所以就到这里了……

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


如何:在 WINDOWS 上安装 64 位 PYSPATIALITE

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


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

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

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

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

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

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

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

要求:

  • Microsoft Windows x64 操作系统(呃!我们在这里做什么?)
    我: 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,但我强烈建议坚持使用与 MSVC 2010 相同的版本 编译 Python 是因为有时它可能有点棘手,这就是我建议的原因 使用 MSVC 而不是 mingw-w64 或 Cygwin 构建。

  • MS Software Development Kit (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

  • Latest GNU iconv source code
    我: libiconv 1.9.2

  • Latest Proj.4 source code
    我: libproj 4.8.0

  • Latest GEOS source code
    ME: libgeos 3.3.5 (svn_trunk) + 2012-07-28 夜间快照
    注意: 同时下载此页面的夜间快照之一;我们需要复制一个缺失的 目录,但我们不想用它来构建库本身。

  • Latest GNU Gettext Runtime BINARY
    ME: Gettext 0.18.1.1-2
    注意: 我们在这里使用二进制而不是从源代码构建由于一个圆形 与 iconv 的依赖关系;你可以解决它,但这更容易/更快/更简单/压力更小- 诱导。

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

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

设置构建环境:

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

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

  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 外壳。如果一切正常,你应该有一个命令行窗口 黄色文字。这表示 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' 等)子 文件夹到“\安装”。无论哪种方式都可以正常工作。

  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”之后立即删除“安装”,然后重新运行上述命令,但是什么是 重点?如果构建部分失败,它无论如何都不会安装。

建筑项目 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. 这需要一些额外的时间和精力。请记住,您同时下载了 最新的稳定版本一个夜间快照商店?如果您还没有,请继续提取 都到单独的文件夹(例如'\Temp\GEOS'和'\Temp\GEOSnap')。

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

  3. GEOS\makefile.vc patch 下载到“\Temp\GEOS\makefile.vc”。 - 说谢谢。'

  4. GEOS\src\makefile.vc patch 下载到“\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 已安装 在“\安装”中。
    这就是依赖库的全部内容;现在您(终于)准备好安装 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']  
    

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

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

  4. 键入以下命令:

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

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

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

    -DVERSION = "3.0.1"  
    

    记下这个数字;您将在未来的几个地方需要它。

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

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

    Line 54: #define VERSION "3.0.1"  
    

    注意:将“3.0.1”替换为您在上面第 30 步(此处为 5)中看到的数字,并确保您 使用双引号 (") NOT 单引号 ('),否则 失败。是的,我发现这很难 方式,不像你那里知道更好的 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 的 Language Bindings: Python 部分的底部 Cookbook,并将“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

【讨论】:

  • 向您致敬!感谢您浏览繁琐的列表
  • 一个非常全面的指南,很棒的工作。不过,我再问一个问题会不会太过分了?我一直在配置 iconv,cmd 不断抛出一个找不到 config.h 库的 cl 错误(退出状态 2)。我应该在哪里得到它,然后放置?谢谢!
  • 我被困在“构建 iconv”的第 2 步。文件“config.h”丢失。有一个文件“config.h.in”,但即使将它重命名为“config.in”,nmake 仍然告诉我它丢失了。我下载了其他库版本并检查该文件不存在。
【解决方案2】:

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

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

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

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

【讨论】:

  • 这似乎只适用于 OsGeo4W 附带的 Python 2.7 - 至少在将文件夹复制到 Python 3.4 安装时它不起作用。
  • 是的,我确实明确提到了 Python 2.7,因为这是我必须用于其他软件的目标版本。我对 64 位版本的编译印象深刻,但目前无法使用。我的解决方案不适用于其他任何解决方案,因为我的 OSGEO4W 是为 2.7 编译的,它节省了 40 个步骤中的大部分。
  • 好的。同时,我找到了另一种在 Windows 下在 spatialite 数据库上使用 Python 的方法(使用 Python 3.4 和 Windows 7 64 位,但也应该在其他版本上工作)。这种方法不是使用pyspatialite,而是使用Python 的常规sqlite3 模块以及加载spatialite 的扩展,该扩展可作为Windows 二进制文件使用。 Check this thread 获取代码和链接。
猜你喜欢
  • 2014-10-02
  • 2018-11-17
  • 1970-01-01
  • 2011-06-10
  • 2014-06-26
  • 2016-06-05
  • 2013-12-25
  • 2018-06-16
  • 2018-09-29
相关资源
最近更新 更多