Correr script de PyQGIS sin correr la GUI de QGIS (Windows y Linux)

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Correr script de PyQGIS sin correr la GUI de QGIS (Windows y Linux)

Miguel Sevilla-Callejo
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:


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 processing
from 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?


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

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

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

sys.path.append('/usr/share/qgis/python/plugins/')

import processing
from 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?)...


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

_______________________________________________
QGIS-es mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-es
Reply | Threaded
Open this post in threaded view
|

Re: Correr script de PyQGIS sin correr la GUI de QGIS (Windows y Linux)

ginetto

tiene problemas en escribir la version python de este codigo c++?

Luigi Pirelli

**************************************************************************************************
* LinkedIn: https://www.linkedin.com/in/luigipirelli
* Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
* GitHub: https://github.com/luipir
* Mastering QGIS 2nd Edition:
* https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
* Hire me: http://goo.gl/BYRQKg
**************************************************************************************************


On Sat, 1 Dec 2018 at 13:34, Miguel Sevilla-Callejo <[hidden email]> wrote:
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:


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 processing
from 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?


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

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

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

sys.path.append('/usr/share/qgis/python/plugins/')

import processing
from 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?)...


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
_______________________________________________
QGIS-es mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-es

_______________________________________________
QGIS-es mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-es
Reply | Threaded
Open this post in threaded view
|

Re: Correr script de PyQGIS sin correr la GUI de QGIS (Windows y Linux)

Miguel Sevilla-Callejo
No se C++ aunque puedo medio entender el inicio del código.
Pero de ahí a aplicarlo a mi consulta... sigo sin saber.
Gracias de todos modos

--
Miguel Sevilla-Callejo
Doctor en Geografía


On Sun, 2 Dec 2018 at 21:51, Luigi Pirelli <[hidden email]> wrote:

tiene problemas en escribir la version python de este codigo c++?

Luigi Pirelli

**************************************************************************************************
* LinkedIn: https://www.linkedin.com/in/luigipirelli
* Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
* GitHub: https://github.com/luipir
* Mastering QGIS 2nd Edition:
* https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
* Hire me: http://goo.gl/BYRQKg
**************************************************************************************************


On Sat, 1 Dec 2018 at 13:34, Miguel Sevilla-Callejo <[hidden email]> wrote:
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:


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 processing
from 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?


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

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

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

sys.path.append('/usr/share/qgis/python/plugins/')

import processing
from 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?)...


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
_______________________________________________
QGIS-es mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-es

_______________________________________________
QGIS-es mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-es