前言
因前段时间做了一个土地调查类的项目,需要大量数据入库,涉及不同类型的点线面图层,便写了一些入库小工具,后期整合资源时,发现在控制台运行总归是不方便的,于是萌生了写图形化界面的想法。大学毕业后几乎没用过arcGIS二次开发了,所以过程中磕磕碰碰,特做个纪念。
编译环境
arcGIS:v10.5
python:2.7.18(win32)此处python版本与arcGIS内置版本一致
pyqt版本:4.11.4,我是在csdn上下载的PyQt4-4.11.4-cp27-cp27m-win32,国外官网下载的无gui界面;
pywin32:218
编译器:pycharm 2020.1,此前用过2022,把我conda搞坏了,所以不推荐。
其余缺少什么直接pip install 即可,切记需支持32位的python2.7。
搭建虚拟环境
为更加好地在工程下安装需要的PyQt4等包,特意创建了一个conda的虚拟环境,操作过程如下:
1、进入控制台,将当前conda设置为32位,命令:set CONDA_FORCE_32BIT=1,该命令只在当前控制台有效,关闭即恢复默认64位。
2、使用命令conda info确认当前环境
3、创建虚拟环境,命令:conda create -n [your_name] python=2.7
4、进入虚拟环境,命令:conda activate [your_name],后输入conda list,查看当前环境是否正确
配置PyCharm环境
打开pycharm,创建当前项目并进入,设置当前项目的编译器(解释器)为刚刚创建的虚拟环境下的python。
设置文本编码方式为UTF-8,这个主要取决于你的代码编码方式。
关闭重启PyCharm,打开终端即可看到命令行前缀有了你的虚拟环境。
在虚拟环境中使用pip安装PyQt4,因为我的PyQt4是网络下载的whl文件,所以直接执行pip install PyQt4-4.11.4-cp27-cp27m-win32.whl。然后再次进入设置界面,配置QT为外部工具:
【QtDesigner】
Program:[你的conda虚拟环境]\Lib\site-packages\PyQt4\designer.exe
Working directory:
P
r
o
j
e
c
t
F
i
l
e
D
i
r
ProjectFileDir
ProjectFileDir
【PyUIC】
Program:[你的conda虚拟环境]\Lib\site-packages\PyQt4\pyuic4.bat
Arguments:
F
i
l
e
N
a
m
e
FileName
FileName -o
F
i
l
e
N
a
m
e
W
i
t
h
o
u
t
E
x
t
e
n
s
i
o
n
FileNameWithoutExtension
FileNameWithoutExtension.py
Working directory:
F
i
l
e
D
i
r
FileDir
FileDir
【PyRcc】
Program:[你的conda虚拟环境]\Lib\site-packages\PyQt4\pyrcc4.exe
Arguments:
F
i
l
e
N
a
m
e
FileName
FileName -o
F
i
l
e
N
a
m
e
W
i
t
h
o
u
t
E
x
t
e
n
s
i
o
n
FileNameWithoutExtension
FileNameWithoutExtension_rc.py
Working directory:
F
i
l
e
D
i
r
FileDir
FileDir
此时还不能直接运行pyqt的ui转.py文件,需要在[你的conda虚拟环境]\Lib\site-packages\PyQt4\pyuic4.bat中配置python的执行目录,否则.bat文件找不到。
编码
此处可以尽情地编码,配置图形化界面,写交互接口…
需要注意的是,引入arcpy的方式建议用sys.append,当需要在其他电脑运行该程序时,记得修改以下路径后再打包,代码如下:
import sys
arcpy_path = [r"[arcGIS安装目录]\Python27\ArcGIS10.5\Lib\site-packages",r'[arcGIS安装目录]\Desktop10.5\arcpy',
r[arcGIS安装目录]\Desktop10.5\bin',r[arcGIS安装目录]\Python27\ArcGIS10.5\Lib',
r'[arcGIS安装目录]Desktop10.5\ArcToolbox\Scripts']
sys.path.extend(arcpy_path)
import arcpy
编译成功后即转下一步,打包!
打包
- 使用pyInstaller打包
- 安装pywin32
双击下载好的pywin32-218.win32-py2.7.exe,进入安装界面,如果安装包找不到python所在路径,可以进入注册表设置\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python\PythonCore\2.7\PythonPath的值为虚拟环境下的python2.7,暂时没有想到别的办法。 - 解压pyInstaller压缩包
解压到你的工程同级目录下,我的版本是2.1。 - 执行打包命令
将工程打包成exe,并设置图标、exe文件名,将arcpy排除在外,test.py就是我工程的主函数。
python .\PyInstaller-2.1\pyinstaller.py -D -w -i tools.ico --name=【name】 --hidden-import=[‘arcpy’] test.py
执行成功后可在工程目录下创建.spec文件和dist、build两个文件夹,其中dist就是我们打包后的文件夹。
- 配置可执行文件的依赖包
找到你arcGIS安装python的路径下的Desktop10.5.pth文件,我的是在[你的arcGIS安装目录]\Python27\ArcGIS10.5\Lib\site-packages\Desktop10.5.pth。在打包后的dist文件夹下创建一个site-packages文件夹,把Desktop10.5.pth复制进去。
这样才可执行文件就可以运行了。此处参考的文章,十分感谢,关键时刻救我小命!
- 使用py2exe打包
- 在工程目录下创建一个setup.py文件,用于打包,同样地将arcpy依赖库排除,设置icon等,代码如下:
# coding=utf-8
# for py2exe
from distutils.core import setup
import py2exe
options = {"py2exe": {"excludes": ["arcpy"],"includes" : ["sip"]}}
setup(console=[{"script": "test.py","icon_resources": [(1, "icon.ico")]}],
options=options,
version="2024.10.22",
)
涉及安装包
所有不方便下载的包我都打包发到百度云了(含PyQt4-4.11.4-cp27-cp27m-win32,PyInstaller-2.1,py2exe-0.6.9.win32-py2.7,pywin32-218.win32-py2.7),总大小53 M,有效期7天,有需要的自取:
- 通过百度网盘分享的文件:python2.7 相关软件
链接:https://pan.baidu.com/s/1IGF0ugYSJQTdgcVasKoKCg?pwd=rxjk
提取码:rxjk*
参考文章
本来直接用arcGIS pro就可以很快完成的工作,因为一开始的犯懒,到后面越走越难,甚至把我conda环境破坏导致重装,不过好歹是走通了,特此感谢以下文章:
https://www.cnblogs.com/firefly_liu/archive/2009/07/03/1516015.html
https://blog.youkuaiyun.com/u012685544/article/details/121226840
https://blog.youkuaiyun.com/superxgl/article/details/78951007
…