16.3. Impostazioni IDE per scrittura e debug dei plugin

Anche se ogni programmatore ha il suo IDE/editor di testo preferito, ecco alcuni consigli per impostare gli IDE più diffusi per la scrittura e il debug dei plugin Python di QGIS.

16.3.1. Plugin utili per scrivere plugin Python

Alcuni plugin sono comodi per la scrittura di plugin Python. Da Plugins ► Gestisci ed Installa Plugin…, installa:

  • Plugin Reloader: Consente di ricaricare un plugin e di apportare nuove modifiche senza riavviare QGIS.

  • First Aid: Aggiungerà una console Python e un debugger locale per ispezionare le variabili quando viene generata un’eccezione da un plugin.

Avvertimento

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. Una nota sulla configurazione di IDE su Linux e Windows

Su Linux, di solito è sufficiente aggiungere i percorsi delle librerie QGIS alla variabile d’ambiente PYTHONPATH dell’utente. Nella maggior parte delle distribuzioni, questo può essere fatto modificando ~/.bashrc o ~/.bash-profile con la seguente linea (testata su OpenSUSE Tumbleweed):

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

Salva il file e implementa le impostazioni di ambiente usando il seguente comando shell:

source ~/.bashrc

Su Windows, devi assicurarti di avere le stesse impostazioni di ambiente e di utilizzare le stesse librerie e lo stesso interprete di QGIS. Il modo più rapido per farlo è modificare il file batch di avvio di QGIS.

Se hai utilizzato il programma di installazione OSGeo4W, puoi trovarlo nella cartella bin dell’installazione di OSGeo4W. Cerca qualcosa come C:\OSGeo4Wbinqgis-unstable.bat.

16.3.3. Debug con Pyscripter IDE (Windows)

Per usare Pyscripter IDE, ecco cosa devi fare:

  1. Fai una copia di qgis-unstable.bat e rinominalo pyscripter.bat.

  2. Aprirlo in un editor. Rimuovi l’ultima riga, quella che avvia QGIS.

  3. Aggiungi una linea che punti all’eseguibile di Pyscripter e aggiungi il parametro della linea di comando che imposta la versione di Python da utilizzare

  4. Aggiungi anche il parametro che punta alla cartella in cui Pyscripter può trovare la dll di Python usata da QGIS, che si trova nella cartella bin dell’installazione di 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. Ora, quando fai doppio clic su questo file batch, viene avviato Pyscripter, con il percorso corretto.

Più popolare di Pyscripter, Eclipse è una scelta comune tra gli sviluppatori. Nella sezione che segue, spiegheremo come configurarlo per sviluppare e testare i plugin.

16.3.4. Debug con Eclipse e PyDev

16.3.4.1. Installazione

Per utilizzare Eclipse, assicurati di aver installato quanto segue

  • Eclipse

  • Aptana Studio 3 Plugin or PyDev

  • QGIS 2.x

  • Si potrebbe anche installare Remote Debug, un plugin di QGIS. Al momento è ancora sperimentale, per cui è necessario prima attivare la casella di controllo Plugin sperimentali in Plugins ► Gestisci ed Installa Plugin… ► Impostazioni.

Per preparare l’ambiente all’uso di Eclipse in Windows, occorre anche creare un file batch e usarlo per avviare Eclipse:

  1. Individuare la cartella in cui risiede qgis_core.dll. Normalmente si tratta di C:\OSGeo4Wappsqgisbin, ma se hai compilato la tua applicazione QGIS questa si trova nella cartella di compilazione in output/bin/RelWithDebInfo.

  2. Individua l’eseguibile eclipse.exe.

  3. Crea il seguente script e utilizzalo per avviare eclipse durante lo sviluppo dei plugin 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. Impostazione di Eclipse

  1. In Eclipse, crea un nuovo progetto. Puoi selezionare Progetto generale e collegare i sorgenti reali in seguito, quindi non ha molta importanza dove si colloca questo progetto.

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

    Fig. 16.26 Progetto Eclipse

  2. Fai clic con il pulsante destro del mouse sul nuovo progetto e scegli Nuovo ► Cartella.

  3. Fai clic su Avanzate e scegliete Collegamento a un percorso alternativo (cartella collegata). Se disponi già di sorgenti di cui vuoi eseguire il debug, sceglile. In caso contrario, crea una cartella come già spiegato.

Ora nella vista Project Explorer, appare il tuo albero dei sorgenti e puoi iniziare a lavorare con il codice. Hai a disposizione l’evidenziazione della sintassi e tutti gli altri potenti strumenti dell’IDE.

16.3.4.3. Configurare il debugger

Per far funzionare il debugger:

  1. Passa alla sezione Debug di Eclipse (Window ► Open Perspective ► Other ► Debug).

  2. avvia il server di debug PyDev scegliendo PyDev ► Start Debug Server.

  3. Eclipse è ora in attesa di una connessione da QGIS al suo server di debug e quando QGIS si connette al server di debug gli permetterà di controllare gli script python. È proprio per questo che abbiamo installato il plugin Remote Debug. Quindi avvia QGIS, se non l’hai già fatto, e fai clic sul simbolo del bug.

Ora puoi impostare un punto di interruzione e, non appena il codice lo raggiunge, l’esecuzione si interrompe e si può ispezionare lo stato attuale del plugin. (Il punto di interruzione è il punto verde nell’immagine sottostante; per impostarlo, fai doppio clic nello spazio bianco a sinistra della linea in cui vuoi che sia impostato il punto di interruzione).

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

Fig. 16.27 Punto di interruzione

Una cosa molto interessante che puoi utilizzare ora è la console di debug. Prima di procedere, assicurati che l’esecuzione si sia fermata a un punto di interruzione.

  1. Apri la vista Console (Window ► Show view). Verrà mostrata la console Debug Server che non è molto interessante. Ma c’è un pulsante Apri console che consente di passare a una console di debug PyDev più interessante.

  2. Fai clic sulla freccia accanto al pulsante Apri console e scegli PyDev Console. Si apre una finestra che chiede quale console vuoi avviare.

  3. Scegli Console di debug PyDev. Nel caso in cui sia grigio e ti dica di avviare il debugger e di selezionare il frame valido, assicurati di aver collegato il debugger remoto e di trovarti in un punto di interruzione.

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

    Fig. 16.28 Console di debug PyDev

Ora hai una console interattiva che consente di testare qualsiasi comando all’interno del contesto corrente. Puoi manipolare le variabili, effettuare chiamate API o qualsiasi altra cosa.

Suggerimento

Un po” fastidioso è che ogni volta che si immette un comando, la console passa di nuovo al server di debug. Per interrompere questo comportamento, puoi fare clic sul pulsante Pin Console quando sei nella pagina del server di debug e la console dovrebbe ricordare questa decisione almeno per la sessione di debug corrente.

16.3.4.4. Fare in modo che eclipse capisca l’API

Una funzione molto utile è quella di far conoscere a Eclipse l’API di QGIS. In questo modo può controllare che il codice non contenga errori di battitura. Ma non solo, Eclipse ti aiuta anche con il completamento automatico delle importazioni e delle chiamate API.

Per fare questo, Eclipse analizza i file delle librerie di QGIS e ottiene tutte le informazioni. L’unica cosa che devi fare è dire a Eclipse dove trovare le librerie.

  1. Fai clic su :menuselezione:`Window --> Preferences --> PyDev --> Interpreter --> Python`.

    Nella parte superiore della finestra vedrai l’interprete python configurato (al momento python2.7 per QGIS) e alcune schede nella parte inferiore. Le schede interessanti per noi sono Libraries e Forced Builtins.

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

    Fig. 16.29 Console di debug PyDev

  2. Per prima cosa apri la scheda Library.

  3. Aggiungi una nuova cartella e scegli la cartella python dell’installazione di QGIS. Se non sai dove si trova questa cartella (non è la cartella dei plugin):

    1. Apri QGIS

    2. Avviare la console python

    3. Immetti qgis

    4. e premi Invio. Ti verrà mostrato il modulo QGIS utilizzato e il suo percorso.

    5. Togli la parte finale /qgis/__init__.pyc da questo percorso e otterrai il percorso desiderato.

  4. Dovresti anche aggiungere qui la cartella dei plugin (si trova in python/plugins sotto la cartella user profile).

  5. Passa quindi alla scheda Forced Builtins, fai clic su New… e inserisci qgis. In questo modo Eclipse analizzerà l’API di QGIS. Probabilmente vuoi che Eclipse conosca anche l’API di PyQt. Perciò aggiungi anche PyQt come builtin forzato. Probabilmente dovrebbe essere già presente nella scheda delle librerie.

  6. Fai clic su OK e hai finito.

Nota

Ogni volta che l’API di QGIS cambia (ad esempio se stai compilando QGIS master e il file SIP è cambiato), dovresti tornare a questa pagina e fare semplicemente clic su Apply. In questo modo Eclipse analizzerà nuovamente tutte le librerie.

16.3.5. Debug con PyCharm su Ubuntu con un QGIS compilato

PyCharm è un IDE per Python sviluppato da JetBrains. Esiste una versione gratuita chiamata Community Edition e una a pagamento chiamata Professional. Puoi scaricare PyCharm dal sito web: https://www.jetbrains.com/pycharm/download.

Si presume che sia stato compilato QGIS su Ubuntu con la directory di compilazione indicata ~/dev/qgis/build/master. Non è obbligatorio avere un QGIS autocompilato, ma solo questo è stato testato. I percorsi devono essere adattati.

  1. In PyCharm, nel tuo Project Properties, Project Interpreter, creeremo un ambiente virtuale Python chiamato QGIS.

  2. Fai clic sul piccolo ingranaggio e quindi su Aggiungi.

  3. Seleziona Ambiente virtuale.

  4. Seleziona un percorso generico per tutti i progetti Python, come ~/dev/qgis/venv, perché useremo questo interprete Python per tutti i nostri plugin.

  5. Scegli un interprete di base Python 3 disponibile sul tuo sistema e seleziona le due opzioni successive Eredita i pacchetti globali del sito e Metti a disposizione di tutti i progetti.

../../../_images/pycharm-add-venv.png
  1. Fai clic su OK, torna sull’ingranaggio piccolo e fai clic su Mostra tutto.

  2. Nella nuova finestra, seleziona il nuovo interprete QGIS e fai clic sull’ultima icona del menu verticale Mostra i percorsi per l’interprete selezionato.

  3. Infine, aggiungi il seguente percorso assoluto all’elenco ~/dev/qgis/build/master/output/python.

../../../_images/pycharm-adding-path.png
  1. Riavvia PyCharm e potrai iniziare a usare questo nuovo ambiente virtuale Python per tutti i tuoi plugin.

PyCharm conoscerà l’API di QGIS e anche l’API di PyQt se si usi Qt fornito da QGIS, come from qgis.PyQt.QtCore import QDir. Il completamento automatico dovrebbe funzionare e PyCharm può ispezionare il codice.

Nella versione professionale di PyCharm, il debug remoto funziona bene. Per l’edizione Community, il debug remoto non è disponibile. Puoi accedere solo a un debugger locale, il che significa che il codice deve essere eseguito all’interno di PyCharm (come script o unittest), non in QGIS stesso. Per il codice Python eseguito in QGIS, si può usare il plugin First Aid menzionato sopra.

16.3.6. Debug con PDB

Se non utilizzi un IDE come Eclipse o PyCharm, puoi eseguire il debug utilizzando PDB, seguendo questi passaggi.

  1. Per prima cosa aggiungi questo codice nel punto in cui vuoi eseguire il debug

    # 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. Esegui quindi QGIS dalla linea di comando.

    In Linux fai:

    $ ./Qgis
    

    In macOS fai:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. E quando l’applicazione raggiunge il punto di interruzione, puoi digitare nella console!

**DA FARE: **

Aggiungere informazioni sui test