早在 2021年2月,我写了一篇 ArcPy 打包效果的演示文章《Python&ArcPy打包指北(上)》,其中展示了打包过程以及演示效果。 不过迟迟没有下一篇,今天终于可以把文章补全了,也将打包的技巧分享出去。 必要的解释再往下讲的话有必要做一定的解释,不然读者可能会懵逼或者兴趣缺缺。 1.1什么是打包打包本身有很多含义,这里的打包是指将 Python 源代码包括相关组件(包括一个Python解释器)打包成一个开箱即用的 .exe 文件或者包含着一个 .exe 文件的文件夹,说简单一点,就是把 Python 脚本变成一个双击就能使用的 .exe 可执行文件。 1.2为什么要打包就如上一条才说的,“把 Python 脚本变成一个双击就能使用的 .exe 可执行文件”,这样做的好处是什么:
1.3针对 ArcPy 的半打包打包的效果当然是非常的好的,但是,ArcPy 是随着 ArcGIS 安装而安装的,ArcGIS 是商业软件,ArcPy 也不是开源的,他是封闭的,所以是不能完全将 ArcPy 打包进一个可执行文件的,不过退而求其次,实现半打包也是可以的。 既然是半打包,那么相应的好处也是不能全兼的,这里详细说明,也适当的降低你的期望值。
除此之外,打包的优点都是继承的。 如何打包这厉害的东西肯定有前人大神尝试过啦,最早的文章可以追溯到 ESRI 的博客《Using Py2exe with Arcpy- It can be done easily!》,然后就是国内 GIS 知乎的这篇文章《如何使用py2exe打包arcpy脚本》,后者在前者的基础上做了一些补充。 主要内容可以分为两部分,第一部分是常规的打包设置教程,使用 py2exe 程序对 Python 源代码进行打包,第二部分就是如何将 ArcPy 引入,最终实现 ArcPy 的半打包。
2.1 第一步 使用 py2exe 打包py2exe 其实也是一个 python 库,不过早已停止更新,但是对付 Python2 还是绰绰有余的,py2exe 有一键安装的程序,非常方便。 打包至少需要两个文件,其中一个是新创建的 setup 文件(名称:mysetup.py),其中包含了各种打包参数;另一个是实际执行代码的主文件(名称:Gispot.py)。 mysetup.py 文件:
由于 ArcPy 是需要 ArcGIS 证书的站点包,无法完全将其打包进程序,所以这里使用 ▶注释一◀:windows 可替换为 console,分别表示打包后的程序是独立窗口还是带一个终端界面。 Gispot.py 文件新增必要的打包代码:
2.2 第二步 打包两个文件放在同一文件夹下,运行 cmd 命令行,或者把命令行复制到 txt 中,然后修改后缀为 bat,直接运行也行:
打包后的成果一般位于 dist 文件夹中,其目录结构一般如下,展示的结构应该比你的复杂,因为自己在使用时添加了很多其他设置。 2.3 第二步 外部引入 ArcPy在上面展示的截图中,有一个 site-package 文件夹,这个需要你手动创建,熟悉 py2exe 的话也可以直接在 mysetup.py 文件中写入创建的操作。 然后在 site-package 文件夹中添加一个 .path 后缀的文本文件,在这个文本中添加上 ArcPy 以及相关的地址: 添加地址后,运行 exe 文件,程序就可以使用 ArcPy 相关的组件了。 于是乎,这样就可以在运行封闭的 .exe 文件时,引入 ArcPy,这就是所说的半打包,也是为什么只能运行在安装了 ArcGIS 的电脑的原因。 好的,到这里为止,就是我对前辈两篇文章的总结,但是实际使用的时候,问题很多。下面来看看解决方法。 引入方法的补充令人苦恼的是,在引入 .path 后缀文件后,运行 .exe 可执行文件,依然会报找不到 arcpy 库的错误(ArcGIS10.3)。 如何解决这个问题呢? 既然我们知道 .path 文件会被系统读取,那我直接在这个文件中写上 import arcpy,这样行不行呢? 诶,这样还真行! 在我也不知道发生了什么,为什么会这样的情况下,我解决了几乎困扰了我一年的问题,简直亦可赛艇! 其他问题读者朋友遇到的问题可能包括但不局限于以下我提到的问题,没有它做不到,只有你想不到,包括各种奇葩问题和错~ 4.1 XML问题除了找不到 arcpy 库的问题外,还可能有出现 xml 的问题,直接在 Gispot.py 中写上 Gispot.py:
4.2 matplotlib问题报错说 Could not find the matplotlib data files。 也是手动导入 matplotlib,不过是写在 mysetup.py 文件中。 mysetup.py:
4.2 多进程问题执行代码的主文件如果涉及多进程的话,打包后的程序也会执行失败,需要的主要文件,也就是这里的 Gispot.py 文件中添加 Gispot.py:
总结整个内容分为三部分, 第一部分:
第二部分:
第三部分:
关于如何打包的问题这里基本就解决啦,在对 .path 文件做完善后,个人使用在10.2、 10.3、10.5 版本的 ArcGIS 上都是可以打包并成功运行的。 将打包后的程序放到其他装有 ArcGIS 的电脑上,也是可以运行的,甚至在 win7 版本的电脑上也可以运行。 如有错误的地方,欢迎指正,我只是一个小菜鸟~ 可能遇到的错误也不止这几个,欢迎来互相伤害。 本系列专辑: 《ArcPy教程指南2021》——从0开始,从实际应用出发,带大家熟悉掌握 ArcPy。(持续更新中!) 都从2021年初写到2022年初了,应该是最后一节了吧 :D 求点赞~ |
|