Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

16.3. IDE-inställningar för skrivning och debuggning av plugins

Även om varje programmerare har sin föredragna IDE/Textredigerare, följer här några rekommendationer för att konfigurera populära IDE:er för att skriva och felsöka QGIS Python-plugins.

16.3.1. Användbara plugins för att skriva Python-plugins

Vissa plugins är praktiska när man skriver Python-plugins. Från Plugins ► Hantera och installera plugins…, installera:

  • Återladdare för insticksprogram: Detta gör att du kan ladda om ett plugin och dra nya ändringar utan att starta om QGIS.

  • Första hjälpen: Detta lägger till en Python-konsol och en lokal felsökare för att inspektera variabler när ett undantag uppstår från ett plugin.

Varning

Trots våra ständiga ansträngningar kan det hända att information bortom denna linje inte uppdateras för QGIS 3.

16.3.2. En anteckning om hur du konfigurerar din IDE under Linux och Windows

På Linux är allt som vanligtvis behöver göras att lägga till QGIS-biblioteksplatserna i användarens miljövariabel PYTHONPATH. Under de flesta distributioner kan detta göras genom att redigera ~/.bashrc eller ~/.bash-profile med följande rad (testad på OpenSUSE Tumbleweed):

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

Spara filen och implementera miljöinställningarna med hjälp av följande shell-kommando:

source ~/.bashrc

På Windows måste du se till att du har samma miljöinställningar och använder samma bibliotek och tolk som QGIS. Det snabbaste sättet att göra detta är att ändra startbatchfilen för QGIS.

Om du använde OSGeo4W Installer kan du hitta den här under mappen bin i din OSGeo4W-installation. Leta efter något som C:\OSGeo4W\bin\qgis-unstable.bat.

16.3.3. Felsökning med hjälp av Pyscripter IDE (Windows)

För att använda Pyscripter IDE, här är vad du måste göra:

  1. Gör en kopia av qgis-unstable.bat och döp om den till pyscripter.bat.

  2. Öppna den i en editor. Och ta bort den sista raden, den som startar QGIS.

  3. Lägg till en rad som pekar på den körbara filen för Pyscripter och lägg till kommandoradsargumentet som anger vilken version av Python som ska användas

  4. Lägg också till argumentet som pekar på mappen där Pyscripter kan hitta Python dll som används av QGIS, du kan hitta den under bin-mappen i din OSGeoW-installation

    @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. När du nu dubbelklickar på denna batchfil kommer den att starta Pyscripter med rätt sökväg.

Eclipse är mer populärt än Pyscripter och är ett vanligt val bland utvecklare. I följande avsnitt förklarar vi hur du konfigurerar det för att utveckla och testa plugins.

16.3.4. Felsökning med hjälp av Eclipse och PyDev

16.3.4.1. Installation

För att använda Eclipse måste du se till att du har installerat följande

  • Eclipse

  • Aptana Studio 3 Plugin eller PyDev

  • QGIS 3.x

  • Du kanske också vill installera Remote Debug, en QGIS plugin. För tillfället är det fortfarande experimentellt så aktivera checkbox Experimental plugins under Plugins ► Hantera och installera plugins… ► Alternativ i förväg.

För att förbereda din miljö för att använda Eclipse i Windows bör du också skapa en batchfil och använda den för att starta Eclipse:

  1. Leta reda på mappen där qgis_core.dll finns. Normalt är detta C:\OSGeo4W\apps\qgis\bin, men om du har kompilerat ditt eget QGIS-program finns detta i din byggmapp i output/bin/RelWithDebInfo

  2. Leta reda på din körbara fil eclipse.exe.

  3. Skapa följande skript och använd det för att starta eclipse när du utvecklar QGIS-plugins.

    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. Konfigurera Eclipse

  1. I Eclipse skapar du ett nytt projekt. Du kan välja General Project och länka dina riktiga källor senare, så det spelar egentligen ingen roll var du placerar det här projektet.

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

    Fig. 16.18 Eclipse-projekt

  2. Högerklicka på det nya projektet och välj :menyselection:`New --> Folder`.

  3. Klicka på Avancerat och välj Länk till alternativ plats (Länkad mapp). Om du redan har källor som du vill felsöka väljer du dessa. Om du inte har det, skapa en mapp som det redan har förklarats.

I vyn Project Explorer dyker nu källträdet upp och du kan börja arbeta med koden. Du har redan syntaxmarkering och alla de andra kraftfulla IDE-verktygen tillgängliga.

16.3.4.3. Konfigurera felsökaren

För att få felsökaren att fungera:

  1. Byt till Debug-perspektivet i Eclipse (:menyval:`Window --> Open Perspective --> Other --> Debug`).

  2. starta PyDev debug server genom att välja PyDev ► Start Debug Server.

  3. Eclipse väntar nu på en anslutning från QGIS till sin debugserver och när QGIS ansluter till debugservern kommer den att tillåta den att styra pythonskripten. Det är precis vad vi installerade Remote Debug plugin för. Så starta QGIS om du inte redan gjort det och klicka på buggsymbolen.

Nu kan du ställa in en brytpunkt och så snart koden träffar den kommer exekveringen att stoppas och du kan inspektera det aktuella tillståndet för ditt plugin. (Brytpunkten är den gröna pricken i bilden nedan, ställ in en genom att dubbelklicka i det vita utrymmet till vänster om den rad du vill att brytpunkten ska ställas in).

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

Fig. 16.19 Brytpunkt

En mycket intressant sak som du kan använda dig av nu är debug-konsolen. Se till att exekveringen för närvarande är stoppad vid en brytpunkt innan du fortsätter.

  1. Öppna konsolvyn (Window ► Show view). Den visar konsolen Debug Server som inte är särskilt intressant. Men det finns en knapp Open Console som låter dig byta till en mer intressant PyDev Debug Console.

  2. Klicka på pilen bredvid knappen Open Console och välj PyDev Console. Ett fönster öppnas där du får frågan om vilken konsol du vill starta.

  3. Välj PyDev Debug Console. Om den är gråtonad och säger åt dig att starta felsökaren och välja den giltiga ramen, se till att du har fjärrfelsökaren ansluten och för närvarande befinner dig på en brytpunkt.

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

    Fig. 16.20 PyDev felsökningskonsol

Du har nu en interaktiv konsol som låter dig testa alla kommandon från det aktuella sammanhanget. Du kan manipulera variabler eller göra API-anrop eller vad du vill.

Tips

Lite irriterande är att varje gång du anger ett kommando växlar konsolen tillbaka till Debug Server. För att stoppa detta beteende kan du klicka på knappen Pin Console när du är på Debug Server-sidan och den bör komma ihåg detta beslut åtminstone för den aktuella debug-sessionen.

16.3.4.4. Få eclipse att förstå API:et

En mycket praktisk funktion är att Eclipse faktiskt känner till QGIS API. Detta gör att den kan kontrollera din kod för stavfel. Men inte bara detta, det gör det också möjligt för Eclipse att hjälpa dig med autokomplettering från importen till API-anrop.

För att göra detta analyserar Eclipse QGIS-biblioteksfilerna och hämtar all information som finns där. Det enda du behöver göra är att tala om för Eclipse var biblioteken finns.

  1. Klicka på Fönster ► Inställningar ► PyDev ► Tolkprogram ► Python.

    Du kommer att se din konfigurerade python-tolk i den övre delen av fönstret (för närvarande python2.7 för QGIS) och några flikar i den nedre delen. De flikar som är intressanta för oss är Libraries och Forced Builtins.

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

    Fig. 16.21 PyDev felsökningskonsol

  2. Öppna först fliken Libraries.

  3. Add a New Folder och välj python-mappen i din QGIS-installation. Om du inte vet var den här mappen finns (det är inte plugins-mappen):

    1. Öppna QGIS

    2. Starta en python-konsol

    3. Ange qgis

    4. och tryck på Enter. Du kommer att se vilken QGIS-modul som används och dess sökväg.

    5. Ta bort den efterföljande /qgis/__init__.pyc från den här sökvägen så har du den sökväg du letar efter.

  4. Du bör också lägga till din plugins-mapp här (den finns i python/plugins under user profile-mappen).

  5. Gå sedan till fliken Forced Builtins, klicka på New… och skriv in qgis. Detta kommer att få Eclipse att analysera QGIS API. Du vill förmodligen också att Eclipse ska känna till PyQt API. Lägg därför också till PyQt som forced builtin. Det bör förmodligen redan finnas i din biblioteksflik.

  6. Klicka på OK och du är klar.

Observera

Varje gång QGIS API ändras (t.ex. om du kompilerar QGIS master och SIP-filen ändras), bör du gå tillbaka till den här sidan och klicka på Apply. Detta kommer att låta Eclipse analysera alla bibliotek igen.

16.3.5. Felsökning med PyCharm på Ubuntu med en kompilerad QGIS

PyCharm är en IDE för Python som utvecklats av JetBrains. Det finns en gratisversion som heter Community Edition och en betald version som heter Professional. Du kan ladda ner PyCharm på webbplatsen: https://www.jetbrains.com/pycharm/download

Vi antar att du har kompilerat QGIS på Ubuntu med den angivna byggkatalogen ~/dev/qgis/build/master. Det är inte obligatoriskt att ha ett egenkompilerat QGIS, men endast detta har testats. Sökvägar måste anpassas.

  1. I PyCharm, i din Project Properties, Project Interpreter, kommer vi att skapa en virtuell Python-miljö som heter QGIS.

  2. Klicka på den lilla kugghjulet och sedan på Add.

  3. Välj Virtualenv-miljö.

  4. Välj en generisk plats för alla dina Python-projekt, t.ex. ~/dev/qgis/venv eftersom vi kommer att använda denna Python-tolk för alla våra insticksprogram.

  5. Välj en Python 3-basinterpretator som finns tillgänglig på ditt system och kontrollera de två följande alternativen Inherit global site-packages och Make available to all projects.

../../../_images/pycharm-add-venv.png
  1. Klicka på OK, gå tillbaka till den lilla växeln och klicka på Visa alla.

  2. I det nya fönstret väljer du din nya tolk QGIS och klickar på den sista ikonen i den vertikala menyn :guilabel:Visa sökvägar för den valda tolken.

  3. Slutligen lägger du till följande absoluta sökväg i listan ~/dev/qgis/build/master/output/python.

../../../_images/pycharm-adding-path.png
  1. Starta om PyCharm så kan du börja använda denna nya virtuella Python-miljö för alla dina plugins.

PyCharm kommer att vara medveten om QGIS API och även om PyQt API om du använder Qt som tillhandahålls av QGIS som from qgis.PyQt.QtCore import QDir. Autokompletteringen bör fungera och PyCharm kan inspektera din kod.

I den professionella versionen av PyCharm fungerar fjärrfelsökning bra. För Community-utgåvan är fjärrfelsökning inte tillgänglig. Du kan bara ha tillgång till en lokal felsökare, vilket innebär att koden måste köras inom PyCharm (som skript eller unittest), inte i själva QGIS. För Python-kod som körs i QGIS kan du använda insticksprogrammet First Aid som nämns ovan.

16.3.6. Felsökning med hjälp av PDB

Om du inte använder en IDE som Eclipse eller PyCharm kan du felsöka med hjälp av PDB genom att följa dessa steg.

  1. Lägg först till den här koden på den plats där du vill göra felsökningen

    # 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. Kör sedan QGIS från kommandoraden.

    På Linux gör du det:

    $ ./Qgis
    

    På macOS gör du det:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. Och när programmet når din brytpunkt kan du skriva i konsolen!

TODO:

Lägg till testinformation