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.

2 comentários:

  1. Thanks for this. I'm so close to getting this to work but I cannot seem to get the following to import:

    from qgis.core import *

    I'm working on a standalone QGIS app and this is kind of crucial.

    Sorry for my bad portuguese!

    Ted

    ResponderExcluir
  2. Never mind -- I fixed my issue and I believe it was related to my PATH

    ResponderExcluir