Cómo configurar PyCharm para trabajar con QGIS y crear scripts de PyQGIS independientes

Los scripts de PyQGIS, la librería de scripting de QGIS, son excelentes para automatizar flujos de trabajo de procesamiento espacial.

Es fácil ejecutar estos scripts dentro de QGIS, pero puede ser aún más conveniente ejecutar scripts de PyQGIS sin ni siquiera tener que iniciar QGIS.

La utilización de un IDE (Entorno de Desarrollo Integrado) como PyCharm cuando trabajamos con Python es fundamental, tanto para escribir código como para la detección y corrección de errores de programación.

Para crear un script de forma «autónoma» es necesario realizar algunos ajustes en el IDE, ya que tenemos que indicar al sistema dónde buscar las bibliotecas de QGIS y los módulos de Python.

Los siguientes pasos muestran cómo configurar PyCharm para el desarrollo independiente de PyQGIS en Windows 10 con OSGeo4W.

Prerrequisitos

Configurar PyCharm para usarlo con QGIS

Hemos probado a configurar PyCharm para usarlo con QGIS (en Windows 10) sin problemas.

En Linux no hay que hacer nada, pero en Windows necesitamos asegurarnos de que tiene la misma configuración de entorno y usar las mismas bibliotecas e intérprete que QGIS.

La forma más rápida de hacer esto es crear un archivo de línea de comandos en el directorio C:\OSGeo4W64 y denominarlo pycharm.cmd

A continuación, abrimos este archivo con un editor de texto e incluimos el siguiente código:

@echo off
SET OSGEO4W_ROOT=C:\OSGeo4W64
call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
call "%OSGEO4W_ROOT%"\apps\grass\grass-7.4.0\etc\env.bat
call qt5_env.bat
call py3_env.bat

@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
path %PATH%;%OSGEO4W_ROOT%\apps\grass\grass78\lib
path %PATH%;C:\OSGeo4W64\apps\Qt5\bin
path %PATH%;C:\OSGeo4W64\apps\Python37\Scripts

set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis
set GDAL_FILENAME_IS_UTF8=YES
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000

set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python37
set PATH=C:\Program Files\Git\bin;%PATH%
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%PYTHONPATH%


start "PyCharm aware of QGIS" /B "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1\bin\pycharm64.exe" %*

Atento a las rutas, ya que depende de las versiones quizá sea necesario modificarlas con las de tu propia instalación.

Ahora cuando hagamos doble clic en este archivo se iniciará PyCharm.

El siguiente paso es incluir el intérprete de Python correspondiente a la instalación de OSGeo4W. Vamos a ver cómo confgurarlo:

En PyCharm seleccionamos File > Settings…

Hacemos clic en Project > Python Interpreter y añadimos un nuevo interprete de sistema (System Interpreter).

Establecemos la ruta del intérprete como C:\OSGeo4W64\apps\Python37\python3.exe como se ve en la siguiente captura de pantalla:

Para finalizar la configuración del intérprete, necesitamos agregar una ruta adicional:

Que apunte a QGIS\python\plugins:

Listo!, vemos cómo se han añadido todos los paquetes de QGIS en nuestro editor:

Ahora ya podemos comenzar a crear aplicaciones independientes con scripts de QGIS.

El siguiente ejemplo muestra los pasos necesarios:

  1. Inicializar QGIS.
  2. Inicializar procesamiento.
  3. Ejecutar un algoritmo de procesamiento que utiliza una capa de entrada de ríos y mediante una expresión seleccione aquellos ríos cuyo nombre sea Nilo y genera una nueva capa únicamente con ese río:
import sys

from qgis.core import QgsApplication, QgsProcessingFeedback
from qgis.analysis import QgsNativeAlgorithms

QgsApplication.setPrefixPath(r'C:\OSGeo4W64\apps\qgis', True)
qgs = QgsApplication([], False)
qgs.initQgis()

# Add the path to processing so we can import it next
sys.path.append(r'C:\OSGeo4W64\apps\qgis\python\plugins')
# Imports usually should be at the top of a script but this unconventional
# order is necessary here because QGIS has to be initialized first
import processing
from processing.core.Processing import Processing

Processing.initialize()
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
feedback = QgsProcessingFeedback()

rivers = r'C:\webmapping\Capas\ne_110m_rivers_lake_centerlines.shp'
output = r'C:\temp\nile.shp'
expression = "name LIKE '%Nile%'"

nile = processing.run(
    'native:extractbyexpression',
    {'INPUT': rivers, 'EXPRESSION': expression, 'OUTPUT': output},
    feedback=feedback
)['OUTPUT']

print(nile)

Al finalizar el proceso se ha creado la nueva capa en el directorio seleccionado. ¡Sin abrir QGIS!

Más info relacionada:

Si quieres aprender a automatizar tareas en QGIS con Python apúntate ya a nuestro curso online de PyQGIS.

Let’s connect!

Date de alta en nuestra newsletter y te enviaremos nuestra propuesta con las mejores
Soluciones GIS basadas en software libre

Tan solo una vez al mes recibirás las últimas novedades del sector GIS y de nuestros cursos

4 comentarios en «Cómo configurar PyCharm para trabajar con QGIS y crear scripts de PyQGIS independientes»

  1. Saludos una duda que me nace con este tema:

    Pycharm tiene una versión de la comunidad gratuita y otra que es profesional, por la cual hay que pagar una licencia que asta la fecha no he entendido bien si es por pagos mensualmente, anual o se obtiene por un pago único.
    en este caso y para este tema en especial que ganaría un desarrollador si tuviera la licencia; tendría algún beneficio mayor que valiera la pena en cuando a desarrollar para PyQGIS, o seria mejor trabajarlo libre puesto que no habrían beneficios.
    quedo a la espera de comentarios
    y gracias por este tema que es excelente los temas que me he encontrado acá.

  2. saludos
    excelente no sabia como usar esto sincronizado; uso PyCharm, pero no había pensado en usarlo así voy a probarlo;

  3. Buen trabajo Aurelio.

    Voy a probarlo a ver si soy capaz de, con la ayuda de pycharm, hacer algún plugin
    saludos

Los comentarios están cerrados.