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安装程序,则可以在binOSGeo4W安装目录下找到它。寻找类似的东西 C:\OSGeo4W\bin\qgis-unstable.bat

使用Pyscripter IDE进行调试(Windows)

要使用Pyscripter IDE,您需要执行以下操作:

  1. 制作一个副本qgis-unstable.bat并重命名pyscripter.bat

  2. 在编辑器中打开它。并删除最后一行,即启动QGIS的那一行。

  3. 添加指向您的Pyscripter可执行文件的行,并添加设置要使用的Python版本的命令行参数

  4. 还要添加指向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
    
  5. 现在,当您双击该批处理文件时,它将以正确的路径启动Pyscripter。

Eclipse比Pyscripter流行,是开发人员的常见选择。在下一节中,我们将说明如何配置它以开发和测试插件。

使用Eclipse和PyDev进行调试

安装

要使用Eclipse,请确保已安装以下内容

  • Eclipse

  • Aptana Studio 3插件PyDev

  • QGIS 2.x

  • 您可能还需要安装QGIS插件Remote Debug。目前仍处于试验阶段,因此请 在“ 插件”‣“管理和安装插件...”‣“选项”复选框启用“ 实验插件” 。

为了准备在Windows中使用Eclipse的环境,您还应该创建一个批处理文件并将其用于启动Eclipse:

  1. 找到qgis_core.dll所在的文件夹。通常是 C:\OSGeo4W\apps\qgis\bin,但是如果您编译自己的QGIS应用程序,则在的build文件夹中。output/bin/RelWithDebInfo

  2. 找到您的eclipse.exe可执行文件。

  3. 创建以下脚本,并在开发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
    

设置

  1. 在Eclipse中,创建一个新项目。您可以选择“ 常规项目”并在以后链接您的真实资源,因此放置此项目的位置并不重要。

    ../../../_images/eclipsenewproject.png

    Eclipse项目

  2. 右键单击您的新项目,然后选择新建文件夹

  3. 单击高级,然后选择链接到备用位置(链接文件夹)。如果您已经有要调试的代码,请选择这些代码。如果您不这样做,请按照已经说明的方法创建一个文件夹。

现在,在Project Explorer视图中,您的代码树弹出,您可以开始调试代码。您已经拥有语法高亮显示和所有其他强大的IDE工具。

配置调试

要使调试器正常工作:

  1. 在Eclipse中切换到“调试”透视图(“ 窗口‣打开透视图‣其他‣调试”)。

  2. 通过选择PyDev‣启动调试服务器来启动PyDev调试服务器。

  3. Eclipse现在正在等待从QGIS到其调试服务器的连接,当QGIS连接到调试服务器时,它将允许它控制python脚本。这正是我们安装Remote Debug插件的目的。因此,如果尚未启动QGIS,请单击它,然后单击调试符号。

现在,您可以设置一个断点,一旦代码执行到断点就会停止,您可以检查插件的当前状态。(断点是下图中的绿点,通过双击行左侧的空白处来设置一个断点)。

断点

您现在可以使用的一个非常有趣的东西是调试控制台。在继续操作之前,请确保执行当前已在断点处停止。

  1. 打开控制台视图(窗口‣显示视图),它将显示Debug Server控制台,这不是很有用。但是有一个“ 打开控制台”按钮,可让您更改为更有用的PyDev调试控制台。

  2. 单击“ 打开控制台”按钮旁边的箭头,然后选择“ PyDev控制台”,将打开一个窗口,询问您要启动哪个控制台。

  3. 选择PyDev调试控制台。如果它变灰并告诉您启动调试器并选择有效的框架,请确保已连接了远程调试器并且当前处于断点。

    ../../../_images/console-buttons.png

    PyDev调试控制台

现在,您有了一个交互式控制台,该控制台可让您从当前上下文中测试任何命令。您可以操纵变量或进行API调用或任何您喜欢的操作。

小费

注意:有点烦人的是,每次输入命令时,控制台都会切换回Debug Server。若要停止此行为,您可以在“调试服务器”页面上单击“ Pin Console”按钮,并且它至少应该可以在当前调试会话中记住此决定。

配置Eclipse知道QGIS API

让Eclipse实际上了解QGIS API是一个非常方便的功能。这使它可以检查您的代码是否有错误,还使Eclipse能够帮助您完成自动补全导入API的调用。

为此,Eclipse解析了QGIS库文件并从那里获取所有信息。唯一要做的就是告诉Eclipse在哪里可以找到这些库。

  1. 单击窗口‣首选项‣PyDev‣解释器‣Python

    您将在窗口的上部看到配置的python解释器(对于QGIS,目前是python2.7),在下部显示一些选项卡。对我们来说有趣的选项卡是Libraries(库)Forced Builtins(强制内置)

    interpreter-libraries.png

    PyDev调试控制台

  2. 首先打开“Libraries”选项卡。

  3. 添加一个新建文件夹,然后选择QGIS安装的python文件夹。如果您不知道此文件夹在哪里(不是plugins文件夹):

    1. 启动QGIS

    2. 打开python控制台

    3. 输入 qgis

    4. 然后按Enter,它将向您显示其使用哪个QGIS模块及其路径。

    5. /qgis/__init__.pyc从该路径中删除尾随,就可以找到所需的路径。

  4. 您还应该在此处添加您的plugins文件夹(python/plugins 位于用户配置文件文件夹下)。

  5. 接下来跳转到“ Forced Builtins”选项卡,单击“ New…”并输入qgis。这将使Eclipse解析QGIS API。您可能还希望Eclipse了解PyQt4 API。因此,还应将PyQt4添加为强制内置。这可能已经存在于“库”选项卡中。

  6. 单击确定,完成。

注意

每次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并不是强制性的,但只有此功能已经过测试。必须调整路径。

  1. Project Properties, Project Interpreter,我们将创建一个名为QGIS的Python虚拟环境。

  2. 单击小齿轮,然后单击Add

  3. 选择Virtualenv environment

  4. 选择所有Python项目的通用位置,例如, ~/dev/qgis/venv因为我们将对所有插件使用此Python解释器。

  5. 选择系统上可用的Python 3.x 解释器,然后检查以下两个选项Inherit global site-packages 和 Make available to all projects

../../../_images/pycharm-add-venv.png
  1. 单击“ 确定”,返回小齿轮,然后单击“ 显示全部”

  2. 在新窗口中,选择新的QGIS解释器,然后单击垂直菜单中的最后一个图标Show paths for the selected interpreter

  3. 最后,将以下绝对路径添加到列表 ~/dev/qgis/build/master/output/python

../../../_images/pycharm-adding-path.png
  1. 重新启动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进行调试。

  1. 首先将此代码添加到您要调试的位置

    # 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()
    
  2. 然后从命令行运行QGIS。

    在Linux上,请执行以下操作:

    $ ./Qgis
    

    在macOS上执行以下操作:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. 当应用程序达到断点时,您可以在控制台打印相关信息!

TODO:

添加测试信息


©版权所有2002-现在,QGIS项目 最近更新于2020年4月3日09:14。

使用Sphinx使用Read the Docs提供的主题构建。

QGIS Python Programming Cookbook - Second Edition by Joel Lawhead English | 14 Mar. 2017 | ASIN: B01MRP7T3B | 464 Pages | AZW3 | 9.26 MB Master over 170 recipes that will help you turn QGIS from a desktop GIS tool into a powerful automated geospatial framework About This Book Delve into the undocumented features of the QGIS API Get a set of user-friendly recipes that can automate entire geospatial workflows by connecting Python GIS building blocks into comprehensive processes This book has a complete code upgrade to QGIS 2.18 and 30 new, valuable recipes Who This Book Is For This book is for geospatial analysts who want to learn more about automating everyday GIS tasks as well as programmers responsible for building GIS applications. The short, reusable recipes make concepts easy to understand and combine so you can build larger applications that are easy to maintain. What You Will Learn Use Python and QGIS to produce captivating GIS visualizations and build complex map layouts Find out how to effectively use the poorly-documented and undocumented features of the QGIS Python API Automate entire geospatial workflows by connecting Python GIS building blocks into comprehensive processes Create, import, and edit geospatial data on disk or in-memory Change QGIS settings programmatically to control default behavior Automatically generate PDF map books Build dynamic forms for field input In Detail QGIS is a desktop geographic information system that facilitates data viewing, editing, and analysis. Paired with the most efficient scripting language—Python, we can write effective scripts that extend the core functionality of QGIS. Based on version QGIS 2.18, this book will teach you how to write Python code that works with spatial data to automate geoprocessing tasks in QGIS. It will cover topics such as querying and editing vector data and using raster data. You will also learn to create, edit, and optimize a vector layer for faster queries, reproject a vector layer, reduce the number of vertices in a vector layer without losing critical data, and convert a raster to a vector. Following this, you will work through recipes that will help you compose static maps, create heavily customized maps, and add specialized labels and annotations. As well as this, we'll also share a few tips and tricks based on different aspects of QGIS. Style and approach This book follows a recipe-based problem-solution approach to address and dispel challenges faced when implementing and using QGIS on a regular basis.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值