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.

sábado, 26 de dezembro de 2009

E viva o PyDev

Continuando o assunto do último post, reporto minhas recentes experiências com o Eclipse PyDev.

Ressaltei que a flexibilidade de interpretadores do PyDev era uma característica muito forte. Ele independe completamente de instalação do Python, portanto você pode escolher qual vai usar em cada projeto. Isso se faz particularmente útil com instalações do Osgeo4W.
Este instalador se encarrega de facilitar a instalação de grande parte dos softwares livres para geociências. Com ele é fácil manter seu Quantum GIS e GRASS atualizados. Uma grande dificuldade, porém, é controlar a diferença entre o Python que vem com o Osgeo4W e os outros Pythons que instalamos. O ideal, na maioria dos casos, é utilizar o Python do Osgeo4W.

Bom, para o usuário final, basta criar um arquivo ".bat" que chame as variáveis de ambiente do Osgeo4W. O script "C:\OSGeo4W\bin\o4w_env.bat" já faz isso. Portanto, para o usuário final basta que o desenvolvedor crie um segundo arquivo bat que chama esse arquivo e depois chama o seu próprio script. Solução simples.

Porém, para utilizar um debugger é preciso explicitar para ele exatamente a mesma coisa que o o4w_env.bat explicita para o interpretador. As duas imagens abaixo exibem como fazer isso no menu Window-> Preferences do Eclipse PyDev. Basicamente definimos um novo interpretador chamado "osgeo" que é o executável "C:\OSGeo4W\bin\python.exe". Depois explicamos os paths nativos (lib), importados (sip) e do qgis para o interpretador "osgeo". Esses arquivos em questão são os ".py" e ".pyd" de cada biblioteca.

Por fim dizemos ao interpretador onde encontrar os arquivos ".dll" que essas bibliotecas acessam. Essa informação vai na variável de ambiente "PATH".

Assim nosso eclipse se encarregará de definir o PATH onde os ".dll" se encontram e incluir no PythonPath nossos ".py" e ".pyd" toda vez que o debugger rodar. Agora podemos debugar inclusive plugins de qgis utilizando PyDev.