16.3. 用于编写和调试插件的IDE设置
尽管每个程序员都有自己喜欢的IDE/文本编辑器,但以下是设置流行的IDE以编写和调试QGIS Python插件的一些建议。
16.3.1. 用于编写Python插件的有用插件
有些插件在编写Python插件时很方便。从…
,安装:Plugin reloader :这将允许您在不重新启动QGIS的情况下重新加载插件并获取新的更改。
First Aid :这将添加一个Python控制台和本地调试器,以便在插件引发异常时检查变量。
警告
Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.
16.3.2. 关于在Linux和Windows上配置IDE的说明
On Linux ,通常需要做的就是将QGIS库位置添加到用户的 PYTHONPATH
环境变量。在大多数发行版中,这可以通过编辑来完成 ~/.bashrc
或 ~/.bash-profile
使用以下代码行(在OpenSUSE Tumbleeed上进行测试):
export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"
使用以下Shell命令保存文件并实施环境设置:
source ~/.bashrc
On Windows ,您需要确保您具有与QGIS相同的环境设置和使用相同的库和解释器。最快的方法是修改QGIS的启动批处理文件。
If you used the OSGeo4W Installer, you can find this under the bin
folder
of your OSGeo4W install. Look for something like
C:\OSGeo4W\bin\qgis-unstable.bat
.
16.3.3. 使用PySCRIPTER IDE进行调试(Windows)
用于使用 Pyscripter IDE ,这是你必须做的:
复制…的副本
qgis-unstable.bat
并将其重命名pyscripter.bat
。在编辑器中打开它。并删除最后一行,即启动QGIS的那一行。
添加指向可执行文件的一行,并添加设置要使用的Python版本的命令行参数
还可以添加指向文件夹的参数,在该文件夹中,您可以在OSGeoW安装的bin文件夹下找到由QGIS使用的PythonDLL
@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,它比Py脚本编写程序更流行。在接下来的部分中,我们将解释如何配置它来开发和测试插件。
16.3.4. 使用Eclipse和PyDev进行调试
16.3.4.1. 安装
要使用Eclipse,请确保您已经安装了以下软件
要使您的环境为在Windows中使用Eclipse做好准备,您还应该创建一个批处理文件并使用它来启动Eclipse:
Locate the folder where
qgis_core.dll
resides in. Normally this isC:\OSGeo4W\apps\qgis\bin
, but if you compiled your own QGIS application this is in your build folder inoutput/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 start /B C:\path\to\your\eclipse.exe
16.3.4.2. 设置Eclipse
在Eclipse中,创建一个新项目。您可以选择 General Project 并在以后链接你的真实资源,所以你把这个项目放在哪里并不重要。
图 16.111 Eclipse项目
右键单击您的新项目,然后选择
。单击 Advanced 并选择 Link to alternate location (Linked Folder) 。如果您已经有要调试的源代码,请选择这些。如果没有,请按照前面所解释的那样创建一个文件夹。
现在,在视图中 Project Explorer ,您的源代码树将弹出,您可以开始使用代码。您已经拥有了语法突出显示和所有其他可用的强大IDE工具。
16.3.4.3. 配置调试器
要使调试器正常工作,请执行以下操作:
切换到Eclipse中的Debug透视图 (
)。通过选择以下命令启动PyDev调试服务器
。现在,eclipse正在等待从QGIS到它的调试服务器的连接,当QGIS连接到调试服务器时,它将允许它控制Python脚本。这正是我们安装的 Remote Debug 插件。因此,如果您还没有启动QGIS,请单击错误符号。
现在您可以设置断点,一旦代码命中断点,执行将停止,您可以检查插件的当前状态。(断点是下图中的绿色圆点,通过在您希望设置断点的行左侧的空白处双击来设置一个断点)。

图 16.112 断点
现在您可以使用的一个非常有趣的东西是调试控制台。在继续执行之前,请确保当前在中断点处停止执行。
打开控制台视图 (Debug Server 游戏机,这不是很有趣。但是有一个按钮 Open Console 这使您可以切换到更有趣的PyDev Debug控制台。
)。它将显示单击按钮旁边的箭头 Open Console 按钮,然后选择 PyDev Console 。将打开一个窗口,询问您要启动哪个控制台。
选 PyDev Debug Console 。如果它变灰并告诉您启动调试器并选择有效的帧,请确保您已经连接了远程调试器并且当前处于断点上。
图 16.113 PyDev调试控制台
现在,您有了一个交互式控制台,它允许您在当前上下文中测试任何命令。您可以操纵变量或进行API调用,或者做任何您喜欢的事情。
小技巧
有点恼人的是,每次您输入命令时,控制台都会切换回Debug Server。要停止此行为,您可以单击 Pin Console 按钮,并且它应该记住这一决定,至少对于当前的调试会话。
16.3.4.4. 让eclipse理解API
一个非常方便的功能是让Eclipse真正了解QGISAPI。这使它能够检查您的代码是否有打字错误。但不仅如此,它还使Eclipse能够帮助您实现从导入到API调用的自动完成。
为此,Eclipse将解析QGIS库文件并获取其中的所有信息。您唯一需要做的就是告诉Eclipse在哪里可以找到这些库。
单击
。您将在窗口的上半部分(目前是用于QGIS的python2.7)和下半部分的一些选项卡中看到已配置的python解释器。我们感兴趣的选项卡有 Libraries 和 Forced Builtins 。
图 16.114 PyDev调试控制台
首先打开库选项卡。
添加一个新文件夹,并选择您的QGIS安装所在的python文件夹。如果您不知道该文件夹在哪里(不是插件文件夹):
开放的QGIS
启动一个python控制台
请输入
qgis
然后按Enter键。它将向您显示它使用的QGIS模块及其路径。
去掉拖尾
/qgis/__init__.pyc
从这条路出发,你就得到了你正在寻找的路。
您还应该在此处添加您的插件文件夹(它在
python/plugins
在 user profile 文件夹)。下一步跳到 Forced Builtins 选项卡中,单击 New... 并输入
qgis
。这将使Eclipse解析QGISAPI。您可能还想让Eclipse了解有关PyQt API的信息。因此,还添加了作为强制内建的PyQt。它可能已经出现在您的库选项卡中。单击 OK 你就完了。
备注
每次QGISAPI更改时(例如,如果您正在编译QGIS主文件并且更改了SIP文件),您应该返回到此页面并只需单击 Apply 。这将允许Eclipse再次解析所有的库。
16.3.5. 在编译好的QGIS的Ubuntu上使用PyCharm进行调试
PyCharm是JetBrains开发的一种针对Python的IDE。有一个叫做社区版的免费版本和一个叫做专业版的付费版本。您可以在以下网站下载PYCharm:https://www.jetbrains.com/pycharm/download
我们假设您已经使用给定的构建目录在Ubuntu上编译了QGIS ~/dev/qgis/build/master
。自编的QGIS并不是强制性的,但只有这一点经过了测试。必须调整路径。
在皮查姆,在你的 Project Properties , Project Interpreter ,我们将创建一个名为
QGIS
。点击小齿轮,然后 Add 。
选择 Virtualenv environment 。
为所有的Python项目选择一个通用位置,例如
~/dev/qgis/venv
因为我们所有的插件都将使用这个Python解释器。选择系统上可用的基于Python3的解释器,然后选中下面两个选项 Inherit global site-packages 和 Make available to all projects 。

单击 OK ,回到小齿轮上,然后点击 Show all 。
在新窗口中,选择您的新口译器
QGIS
并单击垂直菜单中的最后一个图标 Show paths for the selected interpreter.最后,将以下绝对路径添加到列表中
~/dev/qgis/build/master/output/python
。

重新启动PyCharm,您就可以开始对所有插件使用这个新的Python虚拟环境了。
如果您使用QGIS提供的Qt,则PyCharm将知道QGISAPI,如果您使用QGIS提供的QT API,则还会知道PyQt API from qgis.PyQt.QtCore import QDir
。自动完成应该可以工作,并且PyCharm可以检查您的代码。
在专业版的PyCharm中,远程调试运行良好。对于社区版,远程调试不可用。您只能访问本地调试器,这意味着代码必须运行 inside PyCharm(作为脚本或单元测试),而不是在QGIS本身中。对于正在运行的Python代码 in QGIS,您可以使用 First Aid 上面提到的插件。
16.3.6. 使用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:
添加测试信息