16.3. Instellingen voor de IDE voor het schrijven en debuggen van plug-ins

Hoewel elke programmeur zijn eigen voorkeur heeft voor een IDE/tekstbewerker, zijn hier enkele aanbevelingen voor het instellen van enkele populaire IDE’s voor het schrijven en debuggen van plug-ins voor Python in QGIS.

16.3.1. Nuttige plug-ins voor het schrijven van plug-ins in Python

Sommige plug-ins zijn handig bij het schrijven van plug-ins in Python. Installeer vanuit Plug-ins ► Plug-ins beheren en installeren…:

  • Plugin reloader: Dit laat u een plug-in opnieuw laden en nieuwe wijzigingen op te halen, zonder QGIS opnieuw te starten.

  • First Aid: Dit zal een Python-console en lokale debugger toevoegen om variabelen te inspecteren als een uitzondering wordt opgeworpen vanuit een plug-in.

Waarschuwing

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. Een opmerking bij het configureren van uw IDE op Linux en Windows

Op Linux, alles wat gewoonlijk moet worden gedaan is de locaties van de bibliotheken van QGIS toe te voegen aan de omgevingsvariabele PYTHONPATH van de gebruiker. In de meeste distributies kan dit worden gedaan door ~/.bashrc of ~/.bash-profile te bewerken met de volgende regel (getest op OpenSUSE Tumbleweed):

export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"

Sla het bestand op en implementeer de instelling voor de omgeving door de volgende opdracht voor de shell te gebruiken:

source ~/.bashrc

Op Windows dient u er voor te zorgen dat u dezelfde instellingen voor de omgeving hebt en dezelfde bibliotheken en interpreter gebruikt als QGIS. De snelste manier om dit te doen is om het batchbestand voor het opstarten van QGIS aan te passen.

Als u het installatieprogramma van OSGeo4W gebruikte, vindt u dit in de map bin van uw installatie van OSGeoW. Zoek naar iets als C:\OSGeo4W\bin\qgis-unstable.bat.

16.3.3. Debuggen met behulp van Pyscripter IDE (Windows)

Voor het gebruiken van Pyscripter IDE is dit wat u moet doen:

  1. Maak een kopie van qgis-unstable.bat en hernoem die naar pyscripter.bat.

  2. Open het in een bewerker. En verwijder de laatste regel, die welke QGIS laat starten.

  3. Voeg een regel toe die verwijst naar uw uitvoerbare bestand van Pyscripter en voeg het argument voor de opdrachtregel toe dat de te gebruiken versie van Python instelt

  4. Voeg ook het argument toe dat verwijst naar de map waar Pyscripter de Python dll kan vinden die wordt gebruikt door QGIS, u vindt deze in de map bin van uw installatie van OSGeoW

    @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. Wanneer u nu dubbelklikt op dit batch-bestand, zal dat Pyscripter starten, met het juiste pad.

Populairder dan Pyscripter is Eclipse een veelgebruikte keuze voor ontwikkelaars. In het volgende gedeelte zullen we uitleggen hoe het te configureren voor het ontwikkelen en testen van plug-ins.

16.3.4. Debuggen met behulp van Eclipse en PyDev

16.3.4.1. Installatie

Zorg er voor, om Eclipse te kunnen gebruiken, dat u het volgende heeft geïnstalleerd

  • Eclipse

  • Aptana Studio 3 Plugin of PyDev

  • QGIS 2.x

  • U zou misschien ook Remote Debug willen installeren, een plug-in voor QGIS. Op dit moment is die nog steeds experimenteel, dus schakel eerst checkbox Ook de experimentele plug-ins tonen onder Plug-ins ► Plug-ins beheren en installeren… ► Extra in.

U zou ook een batchbestand moeten maken en het gebruiken om Eclipse te starten, om uw omgeving voor te bereiden voor het gebruiken van Eclipse in Windows:

  1. Zoek naar de map waar het bestand qgis_core.dll is geplaatst. Normaal gesproken is dit C:\OSGeo4W\apps\qgis\bin, maar als u uw eigen toepassing in QGIS compileerde staat het in de map waar u het bouwde in output/bin/RelWithDebInfo

  2. Zoek naar uw uitvoerbare bestand eclipse.exe.

  3. Maak het volgende script en gebruik dat om Eclipse te starten bij het ontwikkelen van plug-ins voor QGIS.

    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 instellen

  1. Maak, in Eclipse, een nieuw project. U kunt General Project selecteren en uw echte bronnen later koppelen, dus het maakt niet echt uit waar u dit project plaatst.

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

    Fig. 16.26 Eclipse-project

  2. Klik met rechts op uw nieuwe project en kies New ► Folder.

  3. Klik op [Advanced] en kies Link to alternate location (Linked Folder). In het geval dat u al bronnen heeft die u wilt debuggen, kies die, in het geval u die niet heeft, maak een map aan zoals al eerder is uitgelegd.

Nu zal in de weergave Project Explorer uw boom van bronnen opkomen en kunt u beginnen met het werken aan de code. U heeft al accentuering van syntaxis en alle andere krachtige gereedschappen voor de IDE beschikbaar.

16.3.4.3. Configureren van de debugger

De debugger werkend maken:

  1. Schakel naar het Perspective Debug in Eclipse (Window ► Open Perspective ► Other ► Debug).

  2. start de PyDev debug server door te kiezen PyDev ► Start Debug Server.

  3. Eclipse wacht nu op een verbinding vanuit QGIS naar zijn server voor debuggen en wanneer QGIS verbindt met de server voor debuggen zal dat het mogelijk maken de scripts van Python te beheren. Dat is dus precies waarom we de plug-in Remote Debug hebben geïnstalleerd. Dus start QGIS voor het geval u dat nog niet gedaan heeft en klik op het symbool Bug.

Nu kunt u een onderbrekingspunt instellen en zodra als dat wordt tegengekomen door de code, zal de uitvoering stoppen en kunt u de huidige status van uw plug-in inspecteren. (Het onderbrekingspunt is de groene punt in de afbeelding hieronder, stel er een in door dubbel te klikken in de witte ruimte links van de regel waarvoor u wilt dat het onderbrekingspunt wordt ingesteld).

../../../_images/breakpoint.png

Fig. 16.27 Onderbrekingspunt

Een zeer interessant ding waarvan u nu gebruik kunt maken is de console voor debuggen. Zorg er voor dat de uitvoering nu wordt gestopt op een onderbrekingspunt, voordat u doorgaat.

  1. Open de Console view (Window ► Show view). Het zal de console van Debug Server weergeven, wat niet erg interessant is. Maar er is een knop Open Console die u laat schakelen naar een meer interessante PyDev Debug Console.

  2. Klik op de pijl naast de knop Open Console en kies PyDev Console. Een venster opent om u te vragen welke console u wilt starten.

  3. Kies PyDev Debug Console. In het geval het uitgegrijsd is en het u vertelt de debugger te starten en het geldige frame te selecteren, zorg er voor dat u de debugger op afstand hebt en momenteel op een onderbrekingspunt staat.

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

    Fig. 16.28 PyDev console voor debuggen

U hebt nu een interactieve console die u alle opdrachten laat testen vanuit de de huidige context. U kunt variabelen bewerken of aanroepen naar de API maken of wat u maar wilt.

Tip

Enigszins vervelend is dat, elke keer als u een opdracht invoert, de console terugschakelt naar de Debug Server. U kunt op de knop Pin Console klikken als u op de pagina van de Debug Server bent en het zou deze beslissing, ten minste voor de huidige sessie van debuggen, moeten onthouden om dit gedrag te stoppen,

16.3.4.4. Eclipse de API laten begrijpen

Een zeer handige mogelijkheid is om Eclipse kennis te laten nemen van de API van QGIS. Dit stelt u in staat om het uw code te laten controleren op typefouten. Maar niet alleen dat, het stelt Eclipse ook in staat om u te helpen met automatisch aanvullen vanuit het importeren naar aanroepen van de API.

Eclipse parst de bibliotheekbestanden van QGIS en krijgt daar vandaan alle informatie om dit te doen. Het enige dat u moet doen is Eclipse vertellen waar het de bibliotheken kan vinden.

  1. Klik op Window ► Preferences ► PyDev ► Interpreter ► Python.

    U zult uw geconfigureerde interpreter voor Python zien in het bovenste gedeelte van het venster (op dit moment Python2.7 voor QGIS) en enkele tabs in het onderste gedeelte. De voor ons interessante tabs zijn Libraries en Forced Builtins.

    ../../../_images/interpreter-libraries.png

    Fig. 16.29 PyDev console voor debuggen

  2. Open eerst de tab Libraries.

  3. Voeg een New Folder toe en kies de map voor Python van uw installatie van QGIS. Als u niet weet waar deze map staat (het is niet de map plugins):

    1. Open QGIS

    2. Start een console voor Python

    3. Voer in qgis

    4. en druk op Enter. Het zal u laten zien welke module van QGIS het gebruikt en het pad ervan.

    5. Verwijder het achterliggende gedeelte /qgis/__init__.pyc uit dit pad en u heeft het pad waar u naar zoekt.

  4. U zou hier ook uw map voor plug-ins moeten toevoegen (het staat in python/plugins in de map gebruikersprofiel).

  5. Spring vervolgens naar de tab Forced Builtins, klik op New… en voer in qgis. Dit zal Eclipse de API van QGIS laten parsen. U wilt waarschijnlijk ook dat Eclipse weet heeft van de API voor PyQt. Voeg daarom ook PyQt toe als forced builtin. Die zou waarschijnlijk al aanwezig zijn op uw tab Libraries.

  6. Klik op OK en u bent klaar.

Notitie

Elke keer dat de API van QGIS wijzigt (bijv. als u de master van QGIS compileert en het bestand SIP wijzigt), zou u terug moeten gaan naar deze pagina en eenvoudigweg op Apply moeten klikken. Dat laat Eclipse alle bibliotheken opnieuw parsen.

16.3.5. Debuggen met PyCharm op Ubuntu met een gecompileerde QGIS

PyCharm is een IDE voor Python, ontwikkeld door JetBrains. Er is een gratis versie, genaamd Community Edition, en een waarvoor betaald moet worden, genaamd Professional. U kunt PyCharm downloaden vanaf de website: https://www.jetbrains.com/pycharm/download

We nemen aan dat u QGIS hebt gecompileerd op Ubuntu met de opgegeven map voor het bouwen ~/dev/qgis/build/master. Het is niet verplicht een eigen gecompileerde QGIS te hebben, maar alleen dit is getest. Paden moeten worden aangepast.

  1. In PyCharm, in uw Project Properties, Project Interpreter, gaan we een Python Virtual environment maken, genaamd QGIS.

  2. Klik op het kleine tandwiel en dan op Add.

  3. Selecteer Virtualenv environment.

  4. Selecteer een algemene locatie voor al uw projecten van Python, zoals ~/dev/qgis/venv, omdat we deze interpreter voor Python zullen gebruiken voor al onze plug-ins.

  5. Kies een op uw systeem beschikbare interpreter op basis van Python 3 en selecteer de volgende twee opties Inherit global site-packages en Make available to all projects.

../../../_images/pycharm-add-venv.png
  1. Klik op OK, ga terug naar het kleine tandwiel en klik op Show all.

  2. Selecteer, in het nieuwe venster, uw nieuwe interpreter QGIS en klik op het laatste pictogram in het verticale menu Show paths for the selected interpreter.

  3. Voeg tenslotte het volgende absolute pad toe aan de lijst ~/dev/qgis/build/master/output/python.

../../../_images/pycharm-adding-path.png
  1. Start PyCharm opnieuw op en u kunt beginnen met het gebruiken van deze nieuwe virtuele omgeving van Python voor al uw plug-ins.

PyCharm zal zich bewust zijn van de API van QGIS en ook van de API van PyQt, als u Qt gebruikt zoals het wordt verschaft door QGIS,zoals from qgis.PyQt.QtCore import QDir. Het automatisch aanvullen zou moeten werken en PyCharm kan uw code inspecteren.

In de professionele versie van PyCharm, werkt debuggen op afstand heel goed. Voor de Community edition is debuggen op afstand niet beschikbaar. U hebt alleen toegang tot een lokale debugger, wat betekent dat de code moet worden uitgevoerd binnen PyCharm (als script of eenheidstest), niet in QGIS zelf. Voor Pythoncode die wordt uitgevoerd in QGIS, zou u de plug-in First Aid, zoals hierboven vermeld, kunnen gebruiken.

16.3.6. Debuggen met behulp van PDB

Wanneer u geen IDE gebruikt, zoals Eclipse of PyCharm, kunt u debuggen met PDB, door deze stappen te volgen.

  1. Voeg eerst de code toe op de plaats waar u wilt debuggen

    # 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. Voer dan QGIS uit vanaf de opdrachtregel.

    Doe op Linux:

    $ ./Qgis
    

    Doe op macOS:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. En wanneer de toepassing uw onderbrekingspunt tegenkomt kunt u in de console typen!

TODO:

Informatie voor testen toevoegen