quarta-feira, 30 de dezembro de 2009

PyDev e QGIS

Bom, continuando os estudos com o PyDev, recentemente descobri como fazer para o PyDev debugar plugins do QGIS.
A teoria que viabiliza isso é o Remote Debugger. O PyDev inicia um servidor de debug. O seu plugin deve então se conectar ao servidor de debug e avisá-lo que está pronto para ser debugado. O resto é com o PyDev.

Vamos ao passo-a-passo. Primeiramente, vamos fazer o nosso código passar a avisar o servidor de debug do eclipse. Na linha 3 inserimos o plugin do pydev (onde está o arquivo "pydevd.py" no pythonpath para poder ser importado pelo script. Caso sua instalação não esteja no mesmo lugar, deve-se alterar essa linha.
No restante do código chamamos o servidor de debug e dizemos para ele ficar observando este código.



Agora toda vez que executarmos nosso script python o próprio script irá procurar o servidor de debug do eclipse e avisar que ele está sendo executado e que deseja ser debugado.Note que se o servidor não estiver ligado seu programa não funcionará.
Para podermos acompanhar do eclipse o nosso script, abrimos o Eclipse, vamos a perspectiva de DEBUG,e apertar o botão de iniciar o Debug Server.

A partir deste instante, quando o nosso script tentar achar o debug server, ele vai reconhecer aqui tudo que está acontecendo. Pode-se então definir breakpoints e testar passo a passo, observando o comportamento de cada variável.

Espero que seja útil.

3 comentários:

  1. Mauricio,

    Já tinha utilizado as ferramentas de
    debug das IDE's,PyDev(Eclipse),
    Eric IDE (em Python) e PyScripter (só p/ windows), nos scripts em Python,
    inclusive em projetos usando GEODJANGO, mas não consegui usar as ferramentas de
    debug em plugins para QGIS.

    Em windows, usava a Eric IDE (em Python) e o notepadd++(editor de texto)
    p/ desenvolver scripts p/ QGIS. O QGIS que usava no windows era
    o do setup (QGIS-1.3.0-3-No-GrassSetup.exe).

    Resolvi "limpar o ambiente" na plataforma Windows. Assim,
    desistalei as IDE's, o Python 2.6, o QGIS e utilizei o
    instalador OSGEO4W.

    Novamente, tentei configurar uma IDE p/ usar as ferramentas de Debug,
    como base usei as informações da:
    http://www.qgis.org/wiki/Writing_Python_Plugins
    mas tive problemas com a biblioteca python PDB e tambem não consegui
    mudar p/ o interpretador remoto da IDE Pyscriper (indicada pelo site acima).

    Como ja tinha lido seu material,
    "E viva o PyDev" (sábado, 26 de dezembro de 2009),
    resolvi testar o Eclipse.
    Foi bem tranquilo, como ja tinha usado a ferramenta p/ GEODJANGO,
    facilitou.
    Para saber como executar o QGIS e ter as linhas de parada do DEBUG (breakpoints),
    li esse blog, e tranquilamente, consegui depurar um dos meus plugins no Eclipse.

    Tambem participo da lista qgis-developer, e surgiu dois questionamentos:
    1) Como executar o QGIS diretamente no Eclipse.
    Aproveito o seu blog e descrevo os passos
    1.1) No menu Run, escolher o submenu External Tools.
    1.2) External Tools Configuration:
    Criar um subitem, chamado QGIS, do item Program, com o valor no Location:
    diretorio e nome do programa QGIS,no caso do
    QGIS na OSGEO4W, usei, C:\OSGeo4W\bin\qgis-unstable.bat
    Para executar, basta chamar a ferramenta externa criada
    Menu Run / External Tools / QGIS
    Obs: As linhas de código para acionar o "server debuger" do Eclipse
    podem estar em qualquer arquivo, eu acabei preferindo colocar
    no __init__.py do plugin.
    2) Utilizar as ferramentas de autocompletar p/ as bibliotecas do Qt.
    Não consegui usar o autocompletar nas variaveis instanciadas
    por classes do Qt e do QGIS.
    Acredito que o melhor é utilizar o site das API's,
    Riverbank (PyQt4) : http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html
    QGIS: http://doc.qgis.org/head/

    ResponderExcluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Hi, Mauricio.
    I tried again with a configuration similar to the configuration that you explained.

    Now, I have installed in my XP machine the following software:

    1. OSGeo4W. I selected to install only the following packages:
    - Desktop: qgis-unstable (because of this selection many other packages are selected to be installed apart from qgis-unstable)
    - Libs: libs selected by qgis-unstable + gdal16-ecw + gdal16-mrsid + gdal16-python + libtiff-bin + owslib + pdflib + shapelib + qt4-devel
    - Commandline_Utilities: gpsbabel + setup + shell

    2. Eclipse Classic 3.5.1
    3. Pydev 1.5.4

    After that, I've configured PyDev in Eclipse (Window > Preferences > Pydev > Interpreter-Python) with the python interpreter from OSGeo4W (C\OSGeo4W\bin\python.exe) and the following environment:

    a. PYTHONPATH:
    C:\OSGeo4W\bin
    C:\OSGeo4W\apps\Python25
    C:\OSGeo4W\apps\Python25\DLLs
    C:\OSGeo4W\apps\Python25\Lib
    C:\OSGeo4W\apps\Python25\Lib\site-packages
    C:\OSGeo4W\apps\Python25\sip
    C:\OSGeo4W\apps\qgis-unstable\python
    C:\eclipse\dropins\plugins\org.python.pydev.debug_1.5.4.2010011921\pysrc

    b. Forced Builtins:
    PyQt4
    qgis

    c. Environment variables:

    - PATH:
    C:\OSGeo4W\bin;
    C:\OSGeo4W\apps\qgis-unstable\bin;
    %PATH%

    - PYTHONHOME:
    C:\OSGeo4W\apps\Python25

    - QT_PLUGIN_PATH:
    C:\OSGeo4W\apps\qt4\plugins

    Once again, I tested the fTools Plugin as en example to debug. Also, in the properties of the project, in PyDev-PYTHONPATH, I've added fTools and fTools/tools folders as Source Folders.

    The problem now is that every class, method,... related to PyQt4.QtCore are not recognized. For other libraries, like PyQt4.QtGui, qgis.core,..., everything is well recognized. One symptom is that, in Eclipse, for the lines: "from PyQt4.QtCore import *" there is no "Unused in wild import" warning, while it is present in every similar imports ("from import *").

    Nevertheless, everything works fine when I try to debug with the instructions given in Mauricio de Paulo's blog (http://mauriciodepaulo.blogspot.com/2009/12/pydev-e-qgis.html).

    More information: if I execute a Python shell (C\OSGeo4W\bin\python.exe) with the same environment variables defined previously, there is no problem with PyQt4.QtCore, every class or variables are well recognized.

    So, finally, I can debug, but for PyQt4.QtCore I can´t check the code and I don't have code completion.

    May be I forgot some folder in the PATH variable or a Pydev bug?

    If somebody can help me, I'd be very grateful. Regards.
    Santiago.

    ResponderExcluir