QGIS虽然在国内普及程度不高,但确实是一个非常优秀的GIS软件。而之所以普及度不高,一方面是因为QGIS相较于ESRI的ArcGIS平台开发门槛更高,环境配置麻烦,接口教程较少,初学者上手非常麻烦。另一方面是因为ArcGIS进入国内较早,很多ESRI独有的数据格式现在已经成为了国内不少行业的标准,而QGIS对这部分格式的支持目前尚不完善。但是,随着GIS应用越来越广泛,会有更多的其他行业需要GIS软件处理、展示,开源、免费、轻量级的QGIS相信会被越来越多的人关注到。
QGIS开发一直是笔者关注的问题,之前写了很多QGIS C++二次开发方面的博客,内容不多,但是通过读者的反馈,我能够感受到越来越多的朋友加入到QGIS的开发行列。同时也暴露出了很多初学者面临的问题。QGIS作为一个使用了C++、Qt进行开发的软件,本身就对开发者C++的开发经验有一定要求,这部分主要表现在对QGIS源码进行编译的时候;对Qt的熟悉程度也有一定门槛,这个会影响到阅读QGIS源码的时候。加上开源软件开发文档难免不会非常详细,这就造成了很多初学者朋友感觉毫无头绪、无从下手,遇到问题更是急病乱投医。
因此,笔者针对这些问题,希望换一个角度,通过较为简单的PyQGIS开发来帮助QGIS开发者熟悉QGIS提供的API接口,熟悉QGIS开发的思路,进而更容易进阶QGIS应用的独立程序开发。QGIS的Python接口与C++接口几乎是一致的,因此PyQGIS这一个系列也会有助于用C++开发的朋友找到一点参考。
本文大部分内容最初源于《QGIS Python Programming Cook Book, 2nd
Edition》这本书,但是笔者在使用这本书的时候,发现了许多错误以及讲述不清楚的地方。因此,重新整理书中的内容,加入我自己的理解与实践,为大家提供参考。
摘要
本文包含基本的 PyQGIS 开发环境配置,详细描述如何使用Eclipse + PyDev搭建PyQGIS插件开发的调试环境。
PyQGIS安装
在windows系统下,QGIS安装包会自动安装PyQGIS模块,如果使用Linux或者Mac系统的话,则需要单独安装。(本文重点讲述Windows系统,Linux和Mac系统环境配置请参见QGIS官方网站的帮助文档)
环境变量设置
Windows系统下配置变量主要包含两个部分:
- PATH 变量的配置
- PYTHONPATH 变量的配置。
PATH变量配置
PATH变量的配置主要是为了从命令行能够直接打开PYTHON,这样方便今后外部独立程序使用。
这里的PATH变量指向QGIS安装目录下的两个bin文件夹路径即可。
笔者按照QGIS默认路径安装后,配置了两个主要的路径到PATH变量,如下图。
需要注意的是,这两个路径最好放在PATH变量的最前面,否则其他路径下存在Python或者QGIS模块的话,会引起冲突。
PYTHONPATH变量配置
PYTHONPATH变量的配置是为了让Python能够找到PyQGIS的各种依赖模块,保证正常使用。
主要有几个路径需要配置(注意下面的路径的前提是将QGIS安装到默认位置,否则你需要自行更改)
- C:\\Program Files\\QGIS 2.18\\bin
- C:\\Program Files\\QGIS 2.18\\apps\\Python27\\lib
- C:\\Program Files\\QGIS 2.18\\apps\\qgis\\bin
- C:\\Program Files\\QGIS 2.18\\apps\\qgis\\python
- C:\\Program Files\\QGIS 2.18\\apps\\qgis\\python\\qgis
- C:\\Program Files\\QGIS 2.18\\apps\\Python27\\Lib\\site-packages
- C:\\Program Files\\QGIS 2.18\\apps\\Python27\\DLLs
同样,我把自己的截图拿出来供大家参考。
环境配置检查
完成了上述的配置之后,通过从命令行窗口输入python,并import qgis.core, import qgis.user, import console……这些操作,如果没有报错,就说明环境配置好了。
反之,如果输出找不到模块之类的错误,就应该继续添加相应路径到PYTHONPATH里面。
配置Eclipse+PyDev调试PyQGIS环境
按照上文所述的操作之后,基本上就可以开始编写PyQGIS程序了。但是编程过程中,调试是一个非常方便的工具,为了使用调试器,建议大家还是使用一个IDE进行代码编写吧。
本文用到的IDE为Eclipse,搭配PyDev插件来进行PyQGIS开发。具体配置步骤描述如下。
PyDev插件安装与配置
首先下载并安装Eclipse,在Eclipse的菜单栏上选择“Help -> Install New Software”
在弹出窗口的“Work with”栏,填写网址 http://www.pydev.org/updates 。有些版本的Eclipse可以直接选择“Work with”这一栏的下拉按钮,弹出PyDev的安装网址。总之,填上就行。然后再弹出的资源里面选择“PyDev for Eclipse”就可以了,剩下的“PyDev for Eclipse Developer Resources”以及“PyDev Mylyn Integration”选择性安装即可,不是必须的。
需要注意的是,安装需要Java 8的支持,否则装上的PyDev插件不会出现在菜单栏上。如果你的电脑里面没有Java 8,或者你装好PyDev以后没有显示相应的菜单栏,你可以参照 http://pydev.org/manual_101_install.html ,得到官方的安装帮助。
配置PyQGIS解释器
打开Eclipse,在菜单栏中选择“Window -> Preferences”,打开选项配置窗口。
在选项配置窗口左边树形菜单依次选择 “PyDev -> Interpreters -> Python Interpreter”,在调出的Python Interpreters面板,单击“New”按钮,新建一个解释器,并按照如下图所示填写QGIS安装路径下的 python.exe 位置。
单击“OK”按钮后,会弹出系统找到的相应开发库,全选添加就可以了。
这里有可能会遇到无法创建解释器的问题,这个是由于刚才的PYTHONPATH配置有问题导致的,回去再检查一下你的PYTHONPATH变量配置就可以了
然后,在Force Builtins面板新建一个“qgis”变量,这样在写代码的时候会有QGIS库的自动补全功能。
配置QGIS桌面端
桌面端的配置主要包含2个部分,一个是安装插件,另一个是应用程序环境变量配置。
插件安装
要安装调试相关的插件,必须现在QGIS插件管理器中,打开“启用实验插件”这个选项,否则在插件管理器中是看不到调试相关的插件的。
依次选择QGIS菜单栏“Plugins -> Manage and Install Plugins”,在弹出的窗口中选择“Settings -> Show also experimental plugins”,如下图。
接下来搜索并安装Remote Debug插件和Reload插件。其中,Remote Debug插件是为了连接Eclipse进行远程调试的。而Reload插件则是用于重新加载插件,避免重启QGIS来达到重载的目的。
以上两个插件都下载好以后,可以再下载一个插件叫HelloWorld插件,这个插件顾名思义,就是用来测试你的调试环境是否正确搭建的。
应用程序环境变量设置
最后,非常重要的一点是,要把PyDev插件中的pysrc路径加入到QGIS运行环境中。在笔者的电脑上,这个路径是“C:\\Users\\<你的计算机名>.p2\\pool\\plugins\\org.python.pydev_5.8.0.201706061859\\pysrc”。这个应用程序运行环境可以在QGIS桌面端的“Settings -> Options -> System -> Environment”中配置,如下图。
联动调试
打开Eclipse,新建一个空白工程,把上文下载的HelloWorld插件工程导入这个Eclipse工程中来。HelloWorld插件的目录可以从插件管理器中找到,如下图,是笔者电脑上的安装路径。
在Eclipse中,切换到调试视图,打开HelloWorld.py这个文件,打上一个短点(这里我把断点打在了代码文件的33行)。
选择菜单栏“PyDev -> Start Debug Server”,当Console窗口出现“Debug Server at port: xxxx”出现的时候,就表示当前调试服务器已经启动了。
这时,切换到QGIS软件,选择Remote Debug插件,并单击connect按钮,当QGIS窗体弹出连接成功的消息通知,就表示连接上调试服务器了。
这时候,单击“Plugins -> HelloWorld”插件,切换到Eclipse就会看到,代码在断电处停下来了,接下来就可以使用Eclipse的调试功能进行代码调试了。
可能遇到的问题
- PYTHOHPATH如果没有配置好,很容易出现找不到模块、无法引用等Python错误,可在windows文件管理器搜索相应的模块名称,找到对应的目录,然后将这个目录添加到PYTHONPATH变量中。
- 调试器不能正常使用一方面要检查QGIS软件“系统设置”中是否添加了PyDev的路径,另一方面可能是Remote Debug插件引起的,这个插件虽然开发时间已经很长了,但是仍然是实验版本,重新安装一下插件,重启QGIS等操作可能会有所帮助。
暂无评论内容