PyQGisCookbook--插件开发环境设置(十八/4)
插件开发的IDE设置
尽管每个程序员都有自己喜欢的IDE /文本编辑器,但是这里有一些建议,可以设置流行的IDE来编写和调试QGIS Python插件。
编写Python插件的有用插件
一些插件在编写Python插件时很方便。在插件‣管理和安装插件…中,安装:
-
插件重新加载器(Plugin reloader):这将使您可以重新加载插件并提取新更改,而无需重新启动QGIS。
-
急救(First Aid):当插件引发异常时,将添加Python控制台和本地调试器以检查变量。
在Linux和Windows上配置IDE的说明
在Linux上,通常需要做的就是将QGIS动态库位置添加到用户的PYTHONPATH
环境变量中。在大多数发行版中,可以通过编辑~/.bashrc
或~/.bash-profile
的以下行(在OpenSUSE Tumbleweed上进行测试)来完成:
export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"
使用以下shell命令保存文件并实现环境设置:
source ~/.bashrc
在Windows上,需要确保您具有与QGIS相同的环境设置,并使用相同的库和解释器。最快的方法是修改QGIS的批处理启动文件。
如果您使用了OSGeo4W安装程序,则可以在bin
OSGeo4W安装目录下找到它。寻找类似的东西 C:\OSGeo4W\bin\qgis-unstable.bat
。
使用Pyscripter IDE进行调试(Windows)
要使用Pyscripter IDE,您需要执行以下操作:
-
制作一个副本
qgis-unstable.bat
并重命名pyscripter.bat
。 -
在编辑器中打开它。并删除最后一行,即启动QGIS的那一行。
-
添加指向您的Pyscripter可执行文件的行,并添加设置要使用的Python版本的命令行参数
-
还要添加指向Pyscripter可以找到QGIS使用的Python dll的文件夹的参数,您可以在OSGeoW安装的bin文件夹下找到该参数。
@echo off SET OSGEO4W_ROOT=C:\OSGeo4W call "%OSGEO4W_ROOT%"\bin\o4w_env.bat call "%OSGEO4W_ROOT%"\bin\gdal16.bat @echo off path %PATH%;%GISBASE%\bin Start C:\pyscripter\pyscripter.exe --python25 --pythondllpath=C:\OSGeo4W\bin
-
现在,当您双击该批处理文件时,它将以正确的路径启动Pyscripter。
Eclipse比Pyscripter流行,是开发人员的常见选择。在下一节中,我们将说明如何配置它以开发和测试插件。
使用Eclipse和PyDev进行调试
安装
要使用Eclipse,请确保已安装以下内容
为了准备在Windows中使用Eclipse的环境,您还应该创建一个批处理文件并将其用于启动Eclipse:
-
找到
qgis_core.dll
所在的文件夹。通常是C:\OSGeo4W\apps\qgis\bin
,但是如果您编译自己的QGIS应用程序,则在的build文件夹中。output/bin/RelWithDebInfo
-
找到您的
eclipse.exe
可执行文件。 -
创建以下脚本,并在开发QGIS插件时使用它启动Eclipse。
call "C:\OSGeo4W\bin\o4w_env.bat" set PATH=%PATH%;C:\path\to\your\qgis_core.dll\parent\folder C:\path\to\your\eclipse.exe
设置
-
在Eclipse中,创建一个新项目。您可以选择“ 常规项目”并在以后链接您的真实资源,因此放置此项目的位置并不重要。
Eclipse项目
-
右键单击您的新项目,然后选择新建文件夹。
-
单击高级,然后选择链接到备用位置(链接文件夹)。如果您已经有要调试的代码,请选择这些代码。如果您不这样做,请按照已经说明的方法创建一个文件夹。
现在,在Project Explorer视图中,您的代码树弹出,您可以开始调试代码。您已经拥有语法高亮显示和所有其他强大的IDE工具。
配置调试
要使调试器正常工作:
-
在Eclipse中切换到“调试”透视图(“ 窗口‣打开透视图‣其他‣调试”)。
-
通过选择PyDev‣启动调试服务器来启动PyDev调试服务器。
-
Eclipse现在正在等待从QGIS到其调试服务器的连接,当QGIS连接到调试服务器时,它将允许它控制python脚本。这正是我们安装Remote Debug插件的目的。因此,如果尚未启动QGIS,请单击它,然后单击调试符号。
现在,您可以设置一个断点,一旦代码执行到断点就会停止,您可以检查插件的当前状态。(断点是下图中的绿点,通过双击行左侧的空白处来设置一个断点)。
断点
您现在可以使用的一个非常有趣的东西是调试控制台。在继续操作之前,请确保执行当前已在断点处停止。
-
打开控制台视图(窗口‣显示视图),它将显示Debug Server控制台,这不是很有用。但是有一个“ 打开控制台”按钮,可让您更改为更有用的PyDev调试控制台。
-
单击“ 打开控制台”按钮旁边的箭头,然后选择“ PyDev控制台”,将打开一个窗口,询问您要启动哪个控制台。
-
选择PyDev调试控制台。如果它变灰并告诉您启动调试器并选择有效的框架,请确保已连接了远程调试器并且当前处于断点。
PyDev调试控制台
现在,您有了一个交互式控制台,该控制台可让您从当前上下文中测试任何命令。您可以操纵变量或进行API调用或任何您喜欢的操作。
小费
注意:有点烦人的是,每次输入命令时,控制台都会切换回Debug Server。若要停止此行为,您可以在“调试服务器”页面上单击“ Pin Console”按钮,并且它至少应该可以在当前调试会话中记住此决定。
配置Eclipse知道QGIS API
让Eclipse实际上了解QGIS API是一个非常方便的功能。这使它可以检查您的代码是否有错误,还使Eclipse能够帮助您完成自动补全导入API的调用。
为此,Eclipse解析了QGIS库文件并从那里获取所有信息。唯一要做的就是告诉Eclipse在哪里可以找到这些库。
-
单击窗口‣首选项‣PyDev‣解释器‣Python。
您将在窗口的上部看到配置的python解释器(对于QGIS,目前是python2.7),在下部显示一些选项卡。对我们来说有趣的选项卡是Libraries(库)和Forced Builtins(强制内置)。
PyDev调试控制台
-
首先打开“Libraries”选项卡。
-
添加一个新建文件夹,然后选择QGIS安装的python文件夹。如果您不知道此文件夹在哪里(不是plugins文件夹):
-
启动QGIS
-
打开python控制台
-
输入
qgis
-
然后按Enter,它将向您显示其使用哪个QGIS模块及其路径。
-
/qgis/__init__.pyc
从该路径中删除尾随,就可以找到所需的路径。
-
-
您还应该在此处添加您的plugins文件夹(
python/plugins
位于用户配置文件文件夹下)。 -
接下来跳转到“ Forced Builtins”选项卡,单击“ New…”并输入
qgis
。这将使Eclipse解析QGIS API。您可能还希望Eclipse了解PyQt4 API。因此,还应将PyQt4添加为强制内置。这可能已经存在于“库”选项卡中。 -
单击确定,完成。
注意
每次QGIS API更改时(例如,如果您正在编译QGIS master且SIP文件已更改),则应返回此页面,只需单击 Apply。这将使Eclipse再次解析所有库。
在Ubuntu上使用PyCharm进行调试已编译的QGIS
PyCharm是JetBrains开发的Python IDE。有一个免费版本叫做Community Edition,一个付费版本叫做Professional。您可以在以下网站上下载PyCharm:https://www.jetbrains.com/pycharm/download
我们假设您已经在Ubuntu上使用给定的build目录编译了QGIS ~/dev/qgis/build/master
。拥有自编译的QGIS并不是强制性的,但只有此功能已经过测试。必须调整路径。
-
在Project Properties, Project Interpreter,我们将创建一个名为
QGIS
的Python虚拟环境。 -
单击小齿轮,然后单击Add。
-
选择Virtualenv environment。
-
选择所有Python项目的通用位置,例如,
~/dev/qgis/venv
因为我们将对所有插件使用此Python解释器。 -
选择系统上可用的Python 3.x 解释器,然后检查以下两个选项Inherit global site-packages 和 Make available to all projects。
-
单击“ 确定”,返回小齿轮,然后单击“ 显示全部”。
-
在新窗口中,选择新的
QGIS解释器
,然后单击垂直菜单中的最后一个图标Show paths for the selected interpreter。 -
最后,将以下绝对路径添加到列表
~/dev/qgis/build/master/output/python
。
-
重新启动PyCharm,所有插件使用此新的Python虚拟环境。
如果您使用QGIS提供的Qt(例如from qgis.PyQt.QtCore import QDir
),PyCharm将了解QGIS API以及PyQt API 。自动补全应该可以工作,PyCharm可以检查您的代码。
在专业版的PyCharm中,远程调试可以使用,对于社区版,远程调试不可用。您只能访问本地调试器,这意味着代码必须在 PyCharm 内部运行(作为脚本或单元测试),而不能在QGIS本身中运行。对于在 QGIS中运行的Python代码,您可以使用上面提到的First aid(急救)插件。
使用PDB进行调试
如果不使用Eclipse或PyCharm之类的IDE,则可以按照以下步骤使用PDB进行调试。
-
首先将此代码添加到您要调试的位置
# Use pdb for debugging import pdb # also import pyqtRemoveInputHook from qgis.PyQt.QtCore import pyqtRemoveInputHook # These lines allow you to set a breakpoint in the app pyqtRemoveInputHook() pdb.set_trace()
-
然后从命令行运行QGIS。
在Linux上,请执行以下操作:
$ ./Qgis
在macOS上执行以下操作:
$ /Applications/Qgis.app/Contents/MacOS/Qgis
-
当应用程序达到断点时,您可以在控制台打印相关信息!
TODO:
添加测试信息
©版权所有2002-现在,QGIS项目 最近更新于2020年4月3日09:14。
使用Sphinx使用Read the Docs提供的主题构建。
上一篇: iOS自动化打包
下一篇: iOS面试题(二十九)设计模式