7 votos

Ejecución de una secuencia de comandos QGIS python independiente en Windows 10

En Windows 10, actualmente tengo dos scripts (.Y se BATE .PY) que se utilizan para generar documentos Pdf a partir de QGIS basados en la solución aquí.

Mi objetivo es ser capaz de ejecutar la secuencia de comandos de python sin tener que llamar a los comandos por lotes cada vez, pero estoy teniendo problemas para conseguir que esto funcione.

El createQGISmap.bat archivo contiene:

REM Change OSGeo4W_ROOT to point to your install of QGIS.

SET OSGEO4W_ROOT=C:\Program Files\QGIS 2.18
SET QGISNAME=qgis
SET QGIS=%OSGEO4W_ROOT%\apps\%QGISNAME%
set QGIS_PREFIX_PATH=%QGIS%

CALL "%OSGEO4W_ROOT%\bin\o4w_env.bat"

REM Python Setup
set PATH=%OSGEO4W_ROOT%\bin;%QGIS%\bin;%PATH%
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
set PYTHONPATH=%QGIS%\python;%PYTHONPATH%

ECHO OSGeo path is: %OSGEO4W_ROOT%
ECHO Getting QGIS libs from: %QGIS%
ECHO Python loaded from: %PYTHONHOME%

"C:\Program Files\QGIS 2.18\bin\python.exe" getScreenshot.py

Y el comienzo de la getScreenshot.py script:

from qgis.core import *  
import sys
from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge
from PyQt4.QtCore import QFileInfo, QObject
from PyQt4.QtXml import QDomDocument

gui_flag = True
app = QgsApplication(sys.argv, gui_flag)

# Make sure QGIS_PREFIX_PATH is set in your env if needed!
app.initQgis()

# project.qgs
project_path = 'C:/mydata/qgis/autoexport.qgs' 

He intentado manualmente especificando las variables de entorno en Windows (en C: - Propiedades - configuración Avanzada del sistema - variables de Entorno...) como sigue:

QGIS = C:\Program Files\QGIS 2.18\apps\qgis
QGIS_PREFIX_PATH = C:\Program Files\QGIS 2.18\apps\qgis
PATH = C:\Program Files\QGIS 2.18\bin
PATH = C:\Program Files\QGIS 2.18\apps\qgis\bin
PYTHONHOME = C:\Program Files\QGIS 2.18\apps\Python27
PYTHONPATH = C:\Program Files\QGIS 2.18\python

Pero al ejecutar python getScreenshot.py de la OSGeo4W shell, sigo recibiendo

from qgis.core import *
ImportError: No module named qgis.core

He intentado siguiendo consejos de Cómo puedo solucionar los "ImportError: No module named qgis.núcleo"? y aquí , sin suerte. Debo señalar tengo dos instalaciones de Python (uno incluido con QGIS y Python 3 de Anaconda), así que estoy tratando de ejecutar la secuencia de comandos con la instalación anterior.

7voto

Luke Puntos 2163

He sido capaz de reproducir el problema en un sistema Windows 7 utilizando QGIS 2.14 LTR.

Similar a su archivo de proceso por lotes, el QGIS instalar incluye un python-qgis archivo de proceso por lotes que puede utilizar para ejecutar secuencias de comandos con el ambiente pre-configurado. Como he probado en 2.14 LTR mi archivo de proceso por lotes es %OSGEO4W_ROOT%\bin\python-qgis-ltr.bat ( dependiendo de la versión de su archivo no puede tener la ltr parte: python-qgis.bat). Usted debe encontrar que llamar a:%OSGEO4W_ROOT%\bin\python-qgis-ltr getScreenshot.py desde una ventana de comandos se ejecute correctamente.

La siguiente es una captura de pantalla después de abrir una ventana de comandos en la QGIS 2.14\bin directorio, ejecución python-gqis-ltr.bat, y, a continuación, from qgis.core import *

enter image description here

Con el fin de ejecutar sin el archivo por lotes, usted podría tratar de ajustar manualmente la configuración de las variables de entorno que usted haya previamente, pero de verificación, contra el contenido de python-gqis-ltr.bat o python-gqis.bat dependiendo de la versión. Vale la pena señalar que cuando se abra el OSGeo4W shell se despeja la variable de entorno PATH - así que usted tendrá que restablecer si usted va esta ruta.

Alternativamente, usted puede omitir archivos de proceso por lotes en total, incluyendo un par de líneas en la parte superior de la secuencia de comandos:

import os, sys

# Append QGIS Python library to python search path
sys.path.append(r'C:\Program Files\QGIS 2.14\apps\qgis-ltr\python')

# Append location of DLLs to current system PATH envrionment variable
os.environ['PATH'] += r";C:\Program Files\QGIS 2.14\apps\qgis-ltr\bin;"

# Examine new PATH environment variable
print os.environ['PATH']

# Try the import
from qgis.core import *
print 'Done!'

Esto asegura que el QGIS biblioteca de Python y Dll se puede encontrar. Sin embargo, esto producirá un error si el Dll y Python no están utilizando la misma arquitectura decir, 32-bit, frente a 64 bits.


Actualización

El error que mencionas en tu comentario está sucediendo debido a la ubicación de Python dentro de la QGIS los directorios de instalación. Una típica instalación de Python estándar de las bibliotecas en el directorio Lib, sí almacenados en el mismo directorio que el ejecutable por ejemplo C:\Python27\python.exe y C:\Python27\Lib. Cuando la importación de los módulos de esta carpeta Lib se encuentra en la ruta de búsqueda.

Sin embargo, como QGIS almacena el ejecutable de Python en la QGIS\bin directorio y de las bibliotecas en QGIS\apps\Python27, el estándar de las bibliotecas no se encuentran por defecto. QGIS conjuntos todas las de la misma a través de una serie de archivos de proceso por lotes, por lo que la secuencia de comandos se ejecuta actualmente successfuly en el OSGeo4W shell.

Usted puede utilizar el PYTHONHOME variable de entorno para especificar donde estas bibliotecas son; esto es lo que QGIS usa - y usted tiene la línea en su createQGISmap.bat archivo.

Desde site se importan automáticamente cuando se carga hasta Python necesita tener esta ubicación conocida para el sistema de antemano. Así, la configuración de este manual debería funcionar, pero va a cambiar para su sistema y por lo tanto el impacto de python instalaciones, es decir que, todos apuntan a la misma PYTHONHOME directorio.

Si usted no desea cambiar PYTHONHOME de forma permanente, o recurrir a algo complicada, pegando con un archivo de proceso por lotes es probablemente el camino a seguir.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X