16.4. Configuración IDE para escribir y depurar complementos

Aunque cada programador tiene su editor de texto/IDE preferido, aquí hay algunas recomendaciones para configurar IDE populares para escribir y depurar complementos de QGIS Python.

16.4.1. Complementos útiles para escribir complementos de Python

Algunos complementos son convenientes al escribir complementos de Python. Desde Complementos -> Administrar e instalar complementos…, instala:

  • Plugin reloader: Esto le permitirá recargar un complemento y realizar nuevos cambios sin reiniciar QGIS.

  • First Aid: Esto agregará una consola de Python y un depurador local para inspeccionar las variables cuando se genere una excepción desde un complemento.

Advertencia

Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.

16.4.2. Una nota sobre la configuración de su IDE en Linux y Windows

On Linux, Todo lo que normalmente se debe hacer es agregar las ubicaciones de la biblioteca QGIS a la variable de entorno PYTHONPATH del usuario. En la mayoría de las distribuciones, esto se puede hacer editando ~/.bashrc or ~/.bash-profile con la siguiente línea (probado en OpenSUSE Tumbleweed):

export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"

Guarde el archivo e implemente la configuración del entorno mediante el siguiente comando de shell:

source ~/.bashrc

On Windows, debe asegurarse de tener la misma configuración de entorno y utilizar las mismas bibliotecas e intérprete que QGIS. La forma más rápida de hacerlo es modificar el archivo por lotes de inicio de QGIS.

Si utilizó el instalador de OSGeo4W, puede encontrarlo en la carpeta bin de su instalación de OSGeo4W. Busca algo como C:\OSGeo4W\bin\qgis-unstable.bat.

16.4.3. Depuración con Pyscripter IDE (Windows)

Para usar Pyscripter IDE, esto es lo que tienes que hacer:

  1. Haz una copia de qgis-unstable.bat y renómbrela pyscripter.bat.

  2. Ábrelo en un editor. Y elimine la última línea, la que inicia QGIS.

  3. Agregue una línea que apunte a su ejecutable de Pyscripter y agregue el argumento de línea de comando que establece la versión de Python que se utilizará

  4. También agregue el argumento que apunta a la carpeta donde Pyscripter puede encontrar la dll de Python utilizada por QGIS, puede encontrar esto en la carpeta bin de su instalación de 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
    
  5. Ahora, cuando haga doble clic en este archivo por lotes, se iniciará Pyscripter, con la ruta correcta.

Más popular que Pyscripter, Eclipse es una opción común entre los desarrolladores. En la siguiente sección, explicaremos cómo configurarlo para desarrollar y probar complementos.

16.4.4. Depurar con Eclipse y PyDev

16.4.4.1. Instalación

Para utilizar Eclipse, asegúrese de haber instalado lo siguiente

  • Eclipse

  • Aptana Studio 3 Plugin or PyDev

  • QGIS 2.x

  • Es posible que también desee instalar ** Remote Debug **, un complemento de QGIS. Por el momento, todavía es experimental, habilite checkbox Complementos experimentales en Complementos -> Administrar e instalar complementos… ▶ Opciones de antemano.

Para preparar su entorno para usar Eclipse en Windows, también debe crear un archivo por lotes y usarlo para iniciar Eclipse:

  1. Localice la carpeta donde qgis_core.dll reside. Normalmente este es C:\OSGeo4W\apps\qgis\bin, pero si compiló su propia aplicación QGIS, esto está en su carpeta de compilación en output/bin/RelWithDebInfo

  2. Localice su ejecutable eclipse.exe.

  3. Cree el siguiente script y utilícelo para iniciar eclipse al desarrollar complementos de 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
    

16.4.4.2. Configurando Eclipse

  1. En Eclipse, cree un nuevo proyecto. Puede seleccionar * Proyecto general * y vincular sus fuentes reales más adelante, por lo que realmente no importa dónde coloque este proyecto.

    ../../../_images/eclipsenewproject.png

    Figura 16.10 Proyecto Eclipse

  2. Haz clic derecho en tu nuevo proyecto y elige Nueva ▶ Carpeta.

  3. Click en Acanzado y elige Enlace a ubicación alternativa (carpeta vinculada). En caso de que ya tenga fuentes que desee depurar, elija estas. En caso de que no lo haga, cree una carpeta como ya se explicó.

Ahora en la vista Explorador de proyecto, su árbol de fuentes aparece y puede comenzar a trabajar con el código. Ya tiene resaltado de sintaxis y todas las otras potentes herramientas IDE disponibles.

16.4.4.3. Configurar el depurador

Para que el depurador funcione:

  1. Cambiar a la perspectiva de depuración en Eclipse (Ventana ▶ Abrir Perspectiva ▶ Otra ▶ Depurar).

  2. inicie el servidor de depuración PyDev eligiendo PyDev -> Iniciar servidor de depuración.

  3. Eclipse ahora está esperando una conexión de QGIS a su servidor de depuración y cuando QGIS se conecte al servidor de depuración, le permitirá controlar los scripts de Python. Eso es exactamente para lo que instalamos el complemento Depuración remota. Así que inicie QGIS en caso de que aún no lo haya hecho y haga clic en el símbolo de error.

Ahora puede establecer un punto de interrupción y tan pronto como el código lo golpee, la ejecución se detendrá y podrá inspeccionar el estado actual de su complemento. (El punto de interrupción es el punto verde en la imagen de abajo, establezca uno haciendo doble clic en el espacio en blanco a la izquierda de la línea donde desea que se establezca el punto de interrupción).

../../../_images/breakpoint.png

Figura 16.11 Breakpoint

Una cosa muy interesante que puede utilizar ahora es la consola de depuración. Asegúrese de que la ejecución esté detenida en un punto de interrupción antes de continuar.

  1. Abra la vista de la consola (Ventana -> Mostrar vista). Mostrará la consola Debug Server que no es muy interesante. Pero hay un botón Abrir consola que le permite cambiar a una consola PyDev Debug más interesante.

  2. Haga clic en la flecha junto al: guilabel: botón «Abrir consola» y seleccione * Consola PyDev *. Se abre una ventana para preguntarle qué consola desea iniciar.

  3. Elija * PyDev Debug Console *. En caso de que esté atenuado y le indique que inicie el depurador y seleccione el marco válido, asegúrese de que tiene el depurador remoto adjunto y se encuentra actualmente en un punto de interrupción.

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

    Figura 16.12 Consola de depuración de PyDev

Ahora tiene una consola interactiva que le permite probar cualquier comando desde el contexto actual. Puedes manipular variables o hacer llamadas a API o lo que quieras.

Truco

Un poco molesto es que cada vez que ingresa un comando, la consola vuelve al servidor de depuración. Para detener este comportamiento, puede hacer clic en el botón * Fijar consola * cuando esté en la página del servidor de depuración y debe recordar esta decisión al menos para la sesión de depuración actual.

16.4.4.4. Haciendo que eclipse entienda la API

Una característica muy útil es que Eclipse conozca realmente la API de QGIS. Esto le permite verificar su código en busca de errores tipográficos. Pero no solo esto, también permite que Eclipse lo ayude con el autocompletado desde las importaciones hasta las llamadas a la API.

Para hacer esto, Eclipse analiza los archivos de la biblioteca de QGIS y obtiene toda la información. Lo único que tienes que hacer es decirle a Eclipse dónde encontrar las bibliotecas.

  1. Click Ventana -> Preferencias -> PyDev -> Intérprete -> Python.

    Verá su intérprete de Python configurado en la parte superior de la ventana (en este momento python2.7 para QGIS) y algunas pestañas en la parte inferior. Las pestañas más interesantes para nosotros son * Bibliotecas * y * Forced Builtins *.

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

    Figura 16.13 Consola de depuración de PyDev

  2. Primero abra la pestaña Bibliotecas.

  3. Agregue una nueva carpeta y elija la carpeta de Python de su instalación de QGIS. Si no sabe dónde está esta carpeta (no es la carpeta de complementos):

    1. Abrir QGIS

    2. Inicia una consola de python

    3. Introduce qgis

    4. y presione Entrar. Le mostrará qué módulo QGIS utiliza y su ruta.

    5. Quite el /qgis/__init__.pyc final de esta ruta y obtendrá la ruta que está buscando.

  4. También debe agregar su carpeta de complementos aquí (está en python/complementos debajo de la carpeta user profile).

  5. Luego salte a la pestaña * Forced Builtins *, haga clic en * New … * e ingrese `` qgis “”. Esto hará que Eclipse analice la API de QGIS. Probablemente también desee que Eclipse conozca la API de PyQt. Por lo tanto, también agregue PyQt como incorporado forzado. Eso probablemente ya debería estar presente en la pestaña de bibliotecas.

  6. Click en Aceptar y ya estas listo.

Nota

Cada vez que cambia la API de QGIS (por ejemplo, si está compilando el maestro QGIS y el archivo SIP cambió), debe volver a esta página y simplemente hacer clic en Aplicar. Esto permitirá que Eclipse vuelva a analizar todas las bibliotecas.

16.4.5. Depurar con PyCharm en Ubuntu con un QGIS compilado

PyCharm es un IDE para Python desarrollado por JetBrains. Hay una versión gratuita llamada Community Edition y una de pago llamada Professional. Puede descargar PyCharm en el sitio web: https://www.jetbrains.com/pycharm/download

Suponemos que ha compilado QGIS en Ubuntu con el directorio de compilación proporcionado ~/dev/qgis/build/master. No es obligatorio tener un QGIS autocompilado, pero solo esto ha sido probado. Los caminos deben adaptarse.

  1. En PyCharm, en su: guilabel: Propiedades del proyecto, Intérprete del proyecto, vamos a crear un entorno virtual Python llamado `` QGIS``.

  2. Haga clic en el engranaje pequeño y luego Añadir.

  3. Selecciona Virtualenv environment.

  4. Seleccione una ubicación genérica para todos sus proyectos de Python, como ~/dev/qgis/venv porque usaremos este intérprete de Python para todos nuestros complementos.

  5. Elija un intérprete base de Python 3 disponible en su sistema y marque las siguientes dos opciones Inherit global site-packages y Poner a disposición de todos los proyectos.

../../../_images/pycharm-add-venv.png
  1. Click en Aceptar, regrese al pequeño engranaje y click en Mostrar todo.

  2. En la nueva ventana, seleccione su nuevo intérprete `` QGIS “” y haga clic en el último icono del menú vertical Mostrar rutas para el intérprete seleccionado.

  3. Finalmente, agregue la siguiente ruta absoluta a la lista ~/dev/qgis/build/master/output/python.

../../../_images/pycharm-adding-path.png
  1. Reinicie PyCharm y podrá comenzar a usar este nuevo entorno virtual de Python para todos sus complementos.

PyCharm conocerá la API de QGIS y también la API de PyQt si usa Qt proporcionado por QGIS como from qgis.PyQt.QtCore import QDir. El autocompletado debería funcionar y PyCharm puede inspeccionar su código.

En la versión profesional de PyCharm, la depuración remota funciona bien. Para la edición Community, la depuración remota no está disponible. Solo puede tener acceso a un depurador local, lo que significa que el código debe ejecutarse dentro de PyCharm (como script o unittest), no en QGIS. Para el código Python que se ejecuta en QGIS, puede usar el complemento First Aid mencionado anteriormente.

16.4.6. Depurar usando PDB

Si no usa un IDE como Eclipse o PyCharm, puede depurar usando PDB, siguiendo estos pasos.

  1. Primero agregue este código en el lugar donde le gustaría depurar

    # Use pdb for debugging
    import pdb
    # also import pyqtRemoveInputHook
    from qgis.PyQt.QtCore import pyqtRemoveInputHook
    # These lines allow you to set a breakpoint in the app
    pyqtRemoveInputHook()
    pdb.set_trace()
    
  2. Luego ejecute QGIS desde la línea de comando.

    En Linux haga:

    $ ./Qgis
    

    En macOS haga:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. ¡Y cuando la aplicación llegue a su punto de interrupción, puede escribir en la consola!

PENDIENTE:

Agregar información de prueba