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
, 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:
Fai una copia di
qgis-unstable.bat
e rinominalopyscripter.bat
.Aprirlo in un editor. Rimuovi l’ultima riga, quella che avvia QGIS.
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
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
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
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 .
Per preparare l’ambiente all’uso di Eclipse in Windows, occorre anche creare un file batch e usarlo per avviare Eclipse:
Individuare la cartella in cui risiede
qgis_core.dll
. Normalmente si tratta diC:\OSGeo4Wappsqgisbin
, ma se hai compilato la tua applicazione QGIS questa si trova nella cartella di compilazione inoutput/bin/RelWithDebInfo
.Individua l’eseguibile
eclipse.exe
.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
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.
Fai clic con il pulsante destro del mouse sul nuovo progetto e scegli
.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:
Passa alla sezione Debug di Eclipse (
).avvia il server di debug PyDev scegliendo
.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).
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.
Apri la vista 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.
). Verrà mostrata la consoleFai clic sulla freccia accanto al pulsante Apri console e scegli PyDev Console. Si apre una finestra che chiede quale console vuoi avviare.
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.
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.
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.
Per prima cosa apri la scheda Library.
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):
Apri QGIS
Avviare la console python
Immetti
qgis
e premi Invio. Ti verrà mostrato il modulo QGIS utilizzato e il suo percorso.
Togli la parte finale
/qgis/__init__.pyc
da questo percorso e otterrai il percorso desiderato.
Dovresti anche aggiungere qui la cartella dei plugin (si trova in
python/plugins
sotto la cartella user profile).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.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.
In PyCharm, nel tuo Project Properties, Project Interpreter, creeremo un ambiente virtuale Python chiamato
QGIS
.Fai clic sul piccolo ingranaggio e quindi su Aggiungi.
Seleziona Ambiente virtuale.
Seleziona un percorso generico per tutti i progetti Python, come
~/dev/qgis/venv
, perché useremo questo interprete Python per tutti i nostri plugin.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.
Fai clic su OK, torna sull’ingranaggio piccolo e fai clic su Mostra tutto.
Nella nuova finestra, seleziona il nuovo interprete
QGIS
e fai clic sull’ultima icona del menu verticale Mostra i percorsi per l’interprete selezionato.Infine, aggiungi il seguente percorso assoluto all’elenco
~/dev/qgis/build/master/output/python
.
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.
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()
Esegui quindi QGIS dalla linea di comando.
In Linux fai:
$ ./Qgis
In macOS fai:
$ /Applications/Qgis.app/Contents/MacOS/Qgis
E quando l’applicazione raggiunge il punto di interruzione, puoi digitare nella console!
- **DA FARE: **
Aggiungere informazioni sui test