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

On Linux there is no additional configuration needed to develop plug-ins. But on Windows you need to make sure you that you have the same environment settings and use the same libraries and interpreter as QGIS. The fastest way to do this, is to modify the startup batch file of QGIS.

If you used the OSGeo4W Installer, you can find this under the bin folder of your OSGoeW install. Look for something like C:\OSGeo4W\bin\qgis-unstable.bat.

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

  • Make a copy of qgis-unstable.bat and rename it pyscripter.bat.

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

  • Add a line that points to the your Pyscripter executable and add the commandline argument that sets the version of Python to be used (2.7 in the case of 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.

More popular that Pyscripter, Eclipse is a common choice among developers. In the following sections, we will be explaining how to configure it for developing and testing plugins. To prepare your environment for using Eclipse in Windows, you should also create a batch file and use it to start Eclipse.

To create that batch file, follow these steps.

  • Locate the folder where file:qgis_core.dll resides in. Normally this is C:OSGeo4Wappsqgisbin, but if you compiled your own QGIS application this is in your build folder in 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:

  • Eclipse
  • Aptana Eclipse Plugin or PyDev
  • QGIS 2.0

Preparando QGIS

There is some preparation to be done on QGIS itself. Two plugins are of interest: Remote Debug and Plugin reloader.

  • Go to Plugins ‣ Fetch python plugins
  • Search for Remote Debug ( at the moment it’s still experimental, so enable experimental plugins under the Options tab in case it does not show up ). Install it.
  • 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

Now right click your new project and choose 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 ~/.qgis/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.

Note: 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.

Para outra configuração possível do Eclipse para trabalhar com plugins QGIS Python, verifque este link <http://linfiniti.com/2011/12/remote-debugging-qgis-python-plugins-with-pydev>`_

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 Mac OS X 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