Configurações de IDE para escrita e depuração de plugins

Embora cada programador tem seu editor de Texto/IDE preferido, aqui estão algumas recomendações para configurar o IDE populares para escrever e depurar plugins QGIS Python.

Uma nota na configuração IDE para Windows

No Linux não é necessária configuração adicional para desenvolver complementos. Se você estiver utilizando Windows, certifique-se de possuir as mesmas configurações de ambiente e utilizar as mesmas bibliotecas e interpretador utilizados pelo QGIS. A forma mais rápida de fazer isso, é modificar o arquivo em lote de inicialização do QGIS.

Se você utilizou o instalador OSGeo4W, o arquivo de inicialização pode ser encontrado dentro da pasta bin do diretório de instalação do OSGeo4W. Procure por algo como C:\OSGeo4W\bin\qgis-unstable.bat.

Para usar Pyscripter IDE, eis o que tem de fazer:

  • Faça uma cópia do arquivo qgis-unstable.bat e renomeie para pyscripter.bat.

  • Abra-o em um editor. E remova a última linha, a que inicia o QGIS.

  • Adicione uma linha que aponte para o seu executável Pyscripter e adicione o argumento de linha de comando que define a versão do Phyton a ser utilizada (2.7 no caso do QGIS >= 2.0).

  • Além disso, adicione o argumento de que aponta para a pasta onde PyScripter encontrará a dll Python usado pelo QGIS, você pode encontrá-la na pasta de arquivos binários da instalação 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
    

Agora, quando você clicar duas vezes neste arquivo de lote, vai iniciar PyScripter, com o caminho correto.

Mais popular que o Pyscripter, o Eclipse é uma escolha comum entre os desenvolvedores. Nas seções seguintes, nós iremos explicar como configurá-lo para desenvolver e testar complementos. No Windows, para preparar o ambiente para a utilização do Eclipse, você também precisará criar um arquivo em lote para iniciá-lo.

Para criar o arquivo em lote, siga os passos a seguir:

  • Localize a pasta onde está o arquivo qgis_core.dll. Normalmente ele pode ser encontrado em C:\OSGeo4W\apps\qgis\bin, mas se você compilou seu próprio QGIS, o arquivo estará na sua pasta de compilação em output/bin/RelWithDebInfo.

  • Localize seu executável eclipse.exe.

  • Crie o seguinte script e use para iniciar eclipse quando estiver desenvolvendo plugins QGIS.

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

Depuração usando Eclipse e PyDev

Instalação

Para usar Eclipse, certifique-se que tem instalado o seguinte:

Preparando QGIS

É preciso fazer uma preparação no próprio QGIS. Existem dois complementos necessários: Remote Debug e Plugin reloader.

  • Vá para Complementos ‣ Gerenciar e Instalar Complementos...

  • Procure por Remote Debug (no memento este complemento ainda é experimental, portanto você precisa habilitar a exibição de complementos experimentais em Opções no menu à esquerda caso ele não apareça) . Instale ele.

  • Procurar por Plugin reloader e instalá-lo. Isso permitirá que você recarregue um plugin em vez de ter que fechar e reiniciar QGIS para ter o plugin recarregado.

Configurando Eclipse

Em Eclipse, crie um novo projeto. Você pode selecionar*General Project* e vincular suas fontes reais mais tarde, por isso realmente não importa onde você coloca este projeto.

../../_images/eclipsenewproject.png

Projeto Eclipse

Agora clique com o botão direito no seu novo projeto e selecione New ‣ Folder.

Click [Advanced] and choose Link to alternate location (Linked Folder). In case you already have sources you want to debug, choose these. In case you don’t, create a folder as it was already explained.

Agora, na visão Project Explorer, sua árvore de origem aparece e você pode começar a trabalhar com o código. Você já tem destaque de sintaxe e todas as outras ferramentas IDE disponíveis.

Configurando o depurador

Para obter o depurador trabalhando, alterne para a perspectiva de depuração no Eclipse (Window ‣ Open Perspective ‣ Other ‣ Debug).

Agora inicie o servidor de depuração PyDev selecionando PyDev ‣ Start Debug Server.

Eclipse is now waiting for a connection from QGIS to its debug server and when QGIS connects to the debug server it will allow it to control the python scripts. That’s exactly what we installed the Remote Debug plugin for. So start QGIS in case you did not already and click the bug symbol.

Now you can set a breakpoint and as soon as the code hits it, execution will stop and you can inspect the current state of your plugin. (The breakpoint is the green dot in the image below, set one by double clicking in the white space left to the line you want the breakpoint to be set).

../../_images/breakpoint.png

Ponto de interrupção

Uma coisa muito interessante que você pode fazer uso de agora é o console de depuração. Certifique-se de que a execução está parado em um ponto de interrupção, antes de prosseguir.

Abra a visualização da Console (Window ‣ Show view). Ela vai mostrar console Debug Server que não é muito interessante. Mas há um botão [Open Console] que lhe permite mudar para uma console PyDev Debug mais interessante. Clique na seta ao lado do botão [Open Console] e escolha PyDev Debug Console. Uma janela se abre para perguntar-lhe qual console você quer começar. Escolha PyDev Debug Console. No caso de estar acinzentado e dizer-lhe para iniciar o depurador e selecionar o quadro válido, certifique-se de que você tem o depurador remoto ligado e estão atualmente em um ponto de interrupção.

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

Consolde de depuração PyDev

Agora você tem um console interativo que lhe permite testar os comandos de dentro do contexto atual. Você pode manipular as variáveis ou fazer chamadas de API ou o que quer que você queira.

Um pouco chato é que, cada vez que você digitar um comando, o console volta para o Debug Server. Para parar esse comportamento, você pode clicar no botão Pin Console quando estiver na página Debug Server e ele deve se lembrar esta decisão, pelo menos, para a sessão de depuração atual.

Fazendo eclipse entender a API

Uma característica muito útil é ter Eclipse realmente informado sobre a QGIS API. Isto permite-lhe verificar o seu código de erros de digitação. Mas não é só isso, ele também permite que o Eclipse ajudá-lo com o completamento automático das importações de chamadas da API.

Para fazer isso, Eclipse analisa os arquivos da biblioteca do QGIS e recebe toda a informação lá. A única coisa que você tem a fazer é dizer ao Eclipse onde encontrar as bibliotecas.

Click Window ‣ Preferences ‣ PyDev ‣ Interpreter ‣ Python.

Você vai ver o seu interpretador Python configurado na parte superior da janela (no momento python2.7 para QGIS) e algumas guias na parte inferior. As guias interessantes para nós são Libraries e Forced Builtins

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

Consolde de depuração PyDev

Primeiro, abra a guia Bibliotecas. Adicione uma nova pasta e escolha a pasta python de sua instalação QGIS. Se você não sabe onde está pasta (não é a pasta plugins) abra QGIS, inicie um console python e basta digitar `` qgis`` e pressione Enter. Ela vai mostrar que módulo qgis usa e seu caminho. Tira o final /qgis/__init__.pyc deste caminho e você tem o caminho que está procurando.

You should also add your plugins folder here (on Linux it is ~/.qgis2/python/plugins).

Next jump to the Forced Builtins tab, click on New... and enter qgis. This will make Eclipse parse the QGIS API. You probably also want Eclipse to know about the PyQt4 API. Therefore also add PyQt4 as forced builtin. That should probably already be present in your libraries tab.

Clique OK e está feito.

Nota

Every time the QGIS API changes (e.g. if you’re compiling QGIS master and the SIP file changed), you should go back to this page and simply click Apply. This will let Eclipse parse all the libraries again.

Depuração usando PDB

Se você não usar um IDE como o Eclipse, você pode depurar usando PDB, seguindo estes passos.

Primeiro adicione este código no local onde você gostaria de depurar

# Use pdb for debugging
import pdb
# These lines allow you to set a breakpoint in the app
pyqtRemoveInputHook()
pdb.set_trace()

Em seguida, execute QGIS a partir da linha de comando.

On Linux do:

$ ./Qgis

On macOS do:

$ /Applications/Qgis.app/Contents/MacOS/Qgis

E quando o aplicativo atingir o seu ponto de interrupção você pode digitar no console!

TODO:

Adicione informação de testes