[QGIS-es] Correr script de PyQGIS sin correr la GUI de QGIS (Windows y Linux)

Miguel Sevilla-Callejo msevilla00 en gmail.com
Sab Dic 1 04:34:02 PST 2018


Hola,

Hace un tiempo que pregunté esto por el grupo de Telegram y me indicaron
algunas maneras para Windows y no terminé de ver la forma para Linux y
quería aprovechar la ocasión para crear y dejar este hilo en la lista de
correos.

La idea es saber qué paquetes de Python o cómo he de configurar el sistema
para crear un script de PyQGIS y sin entrar en la GUI de QGIS corran
aprovechando los algoritmos de procesamiento que tiene QGIS.

Por lo visto no es sencillo pero quizá alguien ya lo intentó y resolvió con
anterioridad.

He intentado seguir las indicaciones de esta entrada de Stackoverflow pero
no no me funciona:

https://gis.stackexchange.com/questions/279874/using-qgis3-processing-algorithms-from-standalone-pyqgis-scripts-outside-of-gui/279937#279937

Pego de lo comenté en Telegram aquí:

Miguel Sevilla-Callejo, [09.10.18 17:40]
entiendo que he de importar los paquetes de qgis3:

from qgis.core import (
     QgsApplication,
     QgsProcessingFeedback,
     QgsVectorLayer
)

Miguel Sevilla-Callejo, [09.10.18 17:40]
pero no se como cargar el processing

Miguel Sevilla-Callejo, [09.10.18 17:41]
el post de stackoverflow en cuestion sigue con este código:

# See https://gis.stackexchange.com/a/155852/4972 for details about the prefix

QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()
# Append the path where processing plugin can be
found#sys.path.append('/docs/dev/qgis/build/output/python/plugins')
import processingfrom processing.core.Processing import Processing
Processing.initialize()


Miguel Sevilla-Callejo, [09.10.18 17:42]
pero la cosa es que no termino de entender el sys.path.append que indica
pues ahí no hay nada en mi instalación 😞

Miguel Sevilla-Callejo, [09.10.18 17:42]
alguna idea?

Continúa aquí: https://t.me/qgis_es/13895

Miguel Sevilla-Callejo, [09.10.18 18:15]
parece que ya se me carga aquí la cabecera:

import sysfrom qgis.core import (
     QgsApplication,
     QgsProcessingFeedback,
     QgsVectorLayer
)

QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()

sys.path.append('/usr/share/qgis/python/plugins/')
import processingfrom processing.core.Processing import Processing
Processing.initialize()

Miguel Sevilla-Callejo, [09.10.18 18:19]
la cosa es que ahora no me carga el proceso:

processing.run(
    "native:buffer", {
        'INPUT':dir_base + archivo_entrada, # archivo de entrada
        'DISTANCE':0.002, # distancia del buffer 0.002 grados geográficos
        'SEGMENTS':99, # aproximación en los giros
        'END_CAP_STYLE':0,
        'JOIN_STYLE':0,
        'MITER_LIMIT':2,
        'DISSOLVE':False, # no disolver
        'OUTPUT':dir_base + archivo_salida # archivo de salida
        }
    )

Miguel Sevilla-Callejo, [09.10.18 18:20]
mensaje:
QgsProcessingException: Error: Algorithm native:buffer not found
Fran Raga me dijo que me faltaba

import from qgis.analysis import QgsNativeAlgorithms
Y Luiggi que:
"cuando carga qgis desde script processing esta vacio, en el sentido que no
hay provedores registrados

hay que cargar el provedore de los native algorithms

por el script en entorno linux, y esto no es nada de qgis es puro entorno
unix... neceista que haya dos variable de entorno bien puestas

LD_LIBRARY_PATH donde encontrar los .so de qgis

y PYTHONPATH donde encontrar los modulos de python (sumento que PYTHONHOME
esta ya bien por defecto)

en el script clasico de qgis.bat en winzozz seria la varable PATH la
equivalente de LD_LIBRARY_PATH
"
Más delentante también me dijo que: "no... no es suficiente hacer import de
QgsNativeAlgorithms hay que registrar el provider"
...

En fin... la verdad es que me he perdido un poco en las últimas
explicaciones y leo que he de seguir los test en python (dónde?)...

Luiggi me facilitó esto:
https://github.com/luipir/QGIS/blob/bf6162f376fad6dd44fb2f540c536b7f2371a2a3/tests/src/analysis/testqgsprocessing.cpp
pero, sinceremente me pierdo :-(

Agradecería si alguien se toma la molestia de indicarme una fuente clara o
indicarme cómo podría hacerlo.

Si no siempre me queda correr la GUI indicándole que tras abrir ejecute el
código del scritp con:

qgis --code scriptname.py

y quizá podría añadir al script (para cerrar la GUI) esto:

from qgis.utils import iface
iface.actionExit().trigger()

Aunque esto no lo he hecho funcionar (se me queda la GUI abierta).

Un saludo

--
*Miguel Sevilla-Callejo*
Doctor en Geografía
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.osgeo.org/pipermail/qgis-es/attachments/20181201/55f844b1/attachment.html>


Más información sobre la lista de distribución QGIS-es