22 votos

Importar qgis.core al escribir un script PyQGIS independiente

Estoy tratando de escribir un script Python independiente en windows 7 que utiliza qgis.core y varias otras bibliotecas qgis.

He encontrado una antigua pregunta sobre este tema en ¿Escribir scripts Python independientes con PyQGIS? y seguía sus consejos, utilizando la guía en http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html#python-applications

El código sugerido allí es:

set PYTHONPATH=c:\qgispath\python

seguido por:

set PATH=C:\qgispath;%PATH%

Descubrí que a IDLE no le gustaba el "set at the beggining", así que mi código tiene este aspecto:

PYTHONPATH="C:\OSGeo4W64\apps\qgis\python"
PATH="C:\OSGeo4W64\apps\qgis\python\qgis\core;%PATH%"
import qgis.core

y me sale:

Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    import qgis.core
ImportError: No module named qgis.core

He probado todas las variantes de las rutas que se me ocurren incluyendo quitar el ;%PATH%" al final (que parece un poco superfluo) pero no he sido capaz de encontrar más información.

¿Alguien tiene alguna idea de dónde puedo estar equivocándome?


Después de ver el comentario de Luigi Pirelli lo he intentado:

>>> PYTHONPATH="C:/OSGEO4~1/apps/qgis/./python\qgis"
>>> import qgis.core

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    import qgis.core
ImportError: No module named qgis.core
>>> PATH="C:\OSGeo4W64\apps\qgis\python\qgis\core;%PATH%"
>>> import qgis.core

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    import qgis.core
ImportError: No module named qgis.core
>>> PATH="C:/OSGEO4~1/apps/qgis/./python\qgis\core;%PATH%"
>>> import qgis.core

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    import qgis.core
ImportError: No module named qgis.core
>>>

17voto

Elliott Maynard Puntos 11

Si has instalado QGIS a través de OSGeo4W, te sugiero que sigas este flujo de trabajo (acabo de probarlo en Windows 7):

  1. Abrir OSGeo4W Shell . Start->All programs->OSGeo4W->OSGeo4W Shell .

  2. Establecer variables de entorno . Mi forma preferida es ejecutar este archivo bat (actualizado 2016.11.03: este archivo bat ) de OSGeo4W Shell. Como se puede ver, el archivo establece variables de entorno de esta manera:

    set PYTHONPATH=%OSGEO4W_ROOT%\\apps\\qgis\\python
    set PATH=%OSGEO4W_ROOT%\\apps\\qgis\\bin;%PATH%

    Por supuesto, tienes que comprobar por ti mismo que esas rutas existen en tu sistema operativo y ajustarlas si es necesario.

    Así que, descarga el archivo .bat y ejecútalo accediendo a él desde el Shell de OSGeo4W y pulsando ENTER.

    enter image description here

  3. Importe las bibliotecas PyQGIS mediante uno de los siguientes métodos:

    a. Entra en el intérprete de Python. Ejecutar python en el OSGeo4W Shell e importar las bibliotecas manualmente.

    enter image description here

    b. Ejecutar un script Python. Ejecutar python my_pyqgis_script.py en el OSGeo4W Shell. Yo empezaría con una muy sencilla .

    enter image description here

El flujo de trabajo se publicó (en español) hace varios años en GeoTux y sigue funcionando. Como puedes ver, no incluyo variables de entorno en el script de Python, sino que las establezco en el Shell de OSGeo4W.

9voto

Vlado Klimovský Puntos 196

He estado luchando con un problema similar, y se dio cuenta de un archivo por lotes en el OSGeo4W \bin carpeta llamada python-qgis.bat . Esto es parte de una instalación basada en el paquete OSGeo4W de QGIS 2.18.15 x64 en Windows 10.

Cuando se ejecuta, este archivo por lotes abre el intérprete de Python. import qgis se ejecuta con éxito desde dentro.

Este archivo por lotes contiene la línea (tal y como apunta Germán Carrillo en su respuesta original):

set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%PYTHONPATH%

justo antes de lanzar el intérprete python.

4voto

martinkm Puntos 17

Si quieres tener un proyecto claro para realizar el desarrollo de PyQGIS, Anaconda es la mejor manera de construirlo. Una vez instalado anaconda puedes crear un proyecto para PyQGIS siguiendo estos pasos : 1. Activar el entorno base si no lo está (prefijo '(base)' a la izquierda)

conda activate

2. Crear un entorno conda para el desarrollo de PyQGIS :

conda create -n pyqgis-dev

3. Activar el nuevo entorno

conda activate pyqgis-dev

4. Instala QGIS a través de anaconda en el nuevo entorno, por ejemplo la versión 3.4 :

conda install -c conda-forge qgis=3.4
  1. Escribe "y" y pulsa Intro :

    Collecting package metadata (current_repodata.json): done
    Solving environment: failed with initial frozen solve. Retrying with flexible solve.
    Collecting package metadata (repodata.json): done
    Solving environment: done
    
    ==> WARNING: A newer version of conda exists. <==
      current version: 4.7.12
      latest version: 4.8.2
    
    Please update conda by running
    
    $ conda update -n base -c defaults conda
    
    ## Package Plan ##
    
    environment location: C:\Users\e.conte\AppData\Local\Continuum\anaconda3\envs\pyqgis-dev
    
    added / updated specs:
      - qgis=3.4
    
    The following packages will be downloaded:
    
       package                    |            build
    ---------------------------|-----------------
    pycparser-2.19             |             py_2          88 KB  conda-forge
    ------------------------------------------------------------
                                           Total:          88 KB
    
    The following NEW packages will be INSTALLED:
    
      boost-cpp          conda-forge/win-64::boost-cpp-1.70.0-h6a4c333_2
      bzip2              conda-forge/win-64::bzip2-1.0.8-hfa6e2cd_2
      ca-certificates    conda-forge/win-64::ca-certificates-2019.11.28-hecc5488_0
      certifi            conda-forge/win-64::certifi-2019.11.28-py37_0
      cffi               conda-forge/win-64::cffi-1.13.2-py37hb32ad35_0
      cfitsio            conda-forge/win-64::cfitsio-3.470-hfa6e2cd_2
      chardet            conda-forge/win-64::chardet-3.0.4-py37_1003
      coverage           conda-forge/win-64::coverage-5.0.3-py37hfa6e2cd_0
      cryptography       conda-forge/win-64::cryptography-2.8-py37hb32ad35_1
      curl               conda-forge/win-64::curl-7.68.0-h4496350_0
      expat              conda-forge/win-64::expat-2.2.9-he025d50_2
      freetype           conda-forge/win-64::freetype-2.10.0-h563cfd7_1
      freexl             conda-forge/win-64::freexl-1.0.5-hd288d7e_1002
      future             conda-forge/win-64::future-0.18.2-py37_0
      gdal               conda-forge/win-64::gdal-2.4.2-py37he6b6c38_4
      geos               conda-forge/win-64::geos-3.7.2-he025d50_2
      geotiff            conda-forge/win-64::geotiff-1.5.1-h8f84788_2
      gettext            conda-forge/win-64::gettext-0.19.8.1-hb01d8f6_1002
      glib               conda-forge/win-64::glib-2.58.3-py37hc0c2ac7_1002
      gsl                conda-forge/win-64::gsl-2.5-h631dd0c_1
      hdf4               conda-forge/win-64::hdf4-4.2.13-hf8e6fe8_1003
      hdf5               conda-forge/win-64::hdf5-1.10.5-nompi_ha405e13_1104
      httplib2           conda-forge/win-64::httplib2-0.17.0-py37_0
      icu                conda-forge/win-64::icu-64.2-he025d50_1
      idna               conda-forge/win-64::idna-2.8-py37_1000
      intel-openmp       pkgs/main/win-64::intel-openmp-2019.4-245
      jinja2             conda-forge/noarch::jinja2-2.11.1-py_0
      jpeg               conda-forge/win-64::jpeg-9c-hfa6e2cd_1001
      kealib             conda-forge/win-64::kealib-1.4.10-hf7dc31f_1005
      krb5               conda-forge/win-64::krb5-1.16.4-hdd46e55_0
      libblas            conda-forge/win-64::libblas-3.8.0-14_mkl
      libcblas           conda-forge/win-64::libcblas-3.8.0-14_mkl
      libcurl            conda-forge/win-64::libcurl-7.68.0-h4496350_0
      libffi             conda-forge/win-64::libffi-3.2.1-h6538335_1006
      libgdal            conda-forge/win-64::libgdal-2.4.2-h2bdb96c_4
      libiconv           conda-forge/win-64::libiconv-1.15-hfa6e2cd_1005
      libkml             conda-forge/win-64::libkml-1.3.0-h4ece8bf_1010
      liblapack          conda-forge/win-64::liblapack-3.8.0-14_mkl
      libnetcdf          conda-forge/win-64::libnetcdf-4.6.2-h376842a_1003
      libpng             conda-forge/win-64::libpng-1.6.37-h7602738_0
      libpq              conda-forge/win-64::libpq-11.5-hb0bdaea_2
      libspatialindex    conda-forge/win-64::libspatialindex-1.9.3-he025d50_3
      libspatialite      conda-forge/win-64::libspatialite-4.3.0a-h832c139_1029
      libssh2            conda-forge/win-64::libssh2-1.8.2-h642c060_2
      libtiff            conda-forge/win-64::libtiff-4.1.0-h21b02b4_3
      libxml2            conda-forge/win-64::libxml2-2.9.10-h9ce36c8_0
      libzip             conda-forge/win-64::libzip-1.5.1-h8f0db0c_1005
      lz4-c              conda-forge/win-64::lz4-c-1.8.3-he025d50_1001
      m2w64-expat        pkgs/msys2/win-64::m2w64-expat-2.1.1-2
      m2w64-gcc-libgfor~ pkgs/msys2/win-64::m2w64-gcc-libgfortran-5.3.0-6
      m2w64-gcc-libs     pkgs/msys2/win-64::m2w64-gcc-libs-5.3.0-7
      m2w64-gcc-libs-co~ pkgs/msys2/win-64::m2w64-gcc-libs-core-5.3.0-7
      m2w64-gettext      pkgs/msys2/win-64::m2w64-gettext-0.19.7-2
      m2w64-gmp          pkgs/msys2/win-64::m2w64-gmp-6.1.0-2
      m2w64-libiconv     pkgs/msys2/win-64::m2w64-libiconv-1.14-6
      m2w64-libwinpthre~ pkgs/msys2/win-64::m2w64-libwinpthread-git-5.0.0.4634.697f757-2
      m2w64-xz           pkgs/msys2/win-64::m2w64-xz-5.2.2-2
      markupsafe         conda-forge/win-64::markupsafe-1.1.1-py37hfa6e2cd_0
      mkl                pkgs/main/win-64::mkl-2019.4-245
      mock               conda-forge/win-64::mock-3.0.5-py37_0
      msys2-conda-epoch  pkgs/msys2/win-64::msys2-conda-epoch-20160418-1
      nose2              conda-forge/noarch::nose2-0.9.2-py_0
      numpy              conda-forge/win-64::numpy-1.18.1-py37hc71023c_0
      openjpeg           conda-forge/win-64::openjpeg-2.3.1-h57dd2e7_3
      openssl            conda-forge/win-64::openssl-1.1.1d-hfa6e2cd_0
      owslib             conda-forge/noarch::owslib-0.19.1-py_0
      pcre               conda-forge/win-64::pcre-8.44-h6538335_0
      pip                conda-forge/noarch::pip-20.0.2-py_2
      plotly             conda-forge/noarch::plotly-4.5.0-py_0
      poppler            conda-forge/win-64::poppler-0.67.0-h1707e21_8
      poppler-data       conda-forge/noarch::poppler-data-0.4.9-1
      postgresql         conda-forge/win-64::postgresql-11.5-h06f7779_2
      proj4              conda-forge/win-64::proj4-6.1.0-hc2d0af5_2
      psycopg2           conda-forge/win-64::psycopg2-2.8.4-py37hb32ad35_0
      pycparser          conda-forge/noarch::pycparser-2.19-py_2
      pygments           conda-forge/noarch::pygments-2.5.2-py_0
      pyopenssl          conda-forge/win-64::pyopenssl-19.1.0-py37_0
      pyproj             conda-forge/win-64::pyproj-2.2.1-py37h3f740ce_0
      pyqt               conda-forge/win-64::pyqt-5.9.2-py37h6538335_4
      pysocks            conda-forge/win-64::pysocks-1.7.1-py37_0
      python             conda-forge/win-64::python-3.7.6-h5b45d93_2
      python-dateutil    conda-forge/noarch::python-dateutil-2.8.1-py_0
      pytz               conda-forge/noarch::pytz-2019.3-py_0
      pyyaml             conda-forge/win-64::pyyaml-5.3-py37hfa6e2cd_0
      qca                conda-forge/win-64::qca-2.2.1-h1a227db_2
      qgis               conda-forge/win-64::qgis-3.4.14-py37h64d9c6e_0
      qjson              conda-forge/win-64::qjson-0.9.0-h1a227db_1005
      qscintilla2        conda-forge/win-64::qscintilla2-2.11.2-py37h6acbd6c_0
      qt                 conda-forge/win-64::qt-5.9.7-h506e8af_3
      qtkeychain         conda-forge/win-64::qtkeychain-0.9.1-h1a227db_1001
      qtlocation         conda-forge/win-64::qtlocation-5.9.7-he025d50_1
      qwt                conda-forge/win-64::qwt-6.1.4-h1a227db_1003
      qwtpolar           conda-forge/win-64::qwtpolar-1.1.1-h1a227db_6
      requests           conda-forge/win-64::requests-2.22.0-py37_1
      retrying           conda-forge/noarch::retrying-1.3.3-py_2
      setuptools         conda-forge/win-64::setuptools-45.2.0-py37_0
      sip                conda-forge/win-64::sip-4.19.8-py37h6538335_1000
      six                conda-forge/win-64::six-1.14.0-py37_0
      sqlite             conda-forge/win-64::sqlite-3.30.1-hfa6e2cd_0
      tk                 conda-forge/win-64::tk-8.6.10-hfa6e2cd_0
      urllib3            conda-forge/win-64::urllib3-1.25.7-py37_0
      vc                 pkgs/main/win-64::vc-14.1-h0510ff6_4
      vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.16.27012-hf0eaf9b_1
      wheel              conda-forge/noarch::wheel-0.34.2-py_1
      win_inet_pton      conda-forge/win-64::win_inet_pton-1.1.0-py37_0
      wincertstore       conda-forge/win-64::wincertstore-0.2-py37_1003
      xerces-c           conda-forge/win-64::xerces-c-3.2.2-h6538335_1004
      xz                 conda-forge/win-64::xz-5.2.4-h2fa13f4_1001
      yaml               conda-forge/win-64::yaml-0.2.2-hfa6e2cd_1
      zlib               conda-forge/win-64::zlib-1.2.11-h2fa13f4_1006
      zstd               conda-forge/win-64::zstd-1.4.4-hd8a0e53_1
    
    Proceed ([y]/n)? y

    Este paso básicamente instala la versión de python que coincide con la versión de QGIS que pediste, QGIS en tu entorno python, todas las depedencias que necesita (gdal, geos, psycopg2, sqlite, proj, numpy...), configura el PYTHONPATH a los ficheros dll y pyd. Así que en pocos segundos tienes todo lo que necesitas para desarrollar en PyQGIS.

En la parte superior de todos los scripts que vayas a escribir, te recomiendo que pongas esto antes que nada (la parte de procesar es solo si quieres usar algoritmo de QGIS como clip o reprojectlayer :

import processing
from qgis.core import QgsApplication
from processing.core.Processing import Processing
from qgis.analysis import QgsNativeAlgorithms

qgs = QgsApplication([], False)
qgs.initQgis()
Processing.initialize()
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())

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