Beim Ausführen von eigenständigen PyQGIS-Verarbeitungsskripten ist ein seltsames Problem aufgetreten. Die Reihenfolge der Importe im Skript wirkt sich auf die normale Ausführung aus.
Sie können das Problem reproduzieren, indem Sie eine Python-Konsole öffnen und das folgende Skript eingeben (ich verwende GNU / Linux, QGIS 2.6.1, Verarbeitungs-Plugin v.2.2.0-2 und Python 2.7.3):
# Prepare the environment
import sys
from qgis.core import QgsApplication
from PyQt4.QtGui import QApplication
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()
# Prepare processing framework
sys.path.append('/home/YOUR_USER/.qgis2/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
print Processing.getAlgorithm("qgis:creategrid")
# Exit applications
QgsApplication.exitQgis()
QApplication.exit()
Sie sollten erhalten:
ALGORITHM: Create grid
HSPACING <ParameterNumber>
VSPACING <ParameterNumber>
WIDTH <ParameterNumber>
HEIGHT <ParameterNumber>
CENTERX <ParameterNumber>
CENTERY <ParameterNumber>
GRIDTYPE <ParameterSelection>
CRS <ParameterCrs>
SAVENAME <OutputVector>
Wenn Sie dagegen die Reihenfolge der Importe ändern (Zeilen 3 und 4), gehen Sie folgendermaßen vor:
from PyQt4.QtGui import QApplication
from qgis.core import QgsApplication
Das Skript gibt nun ... zurück None
, da der Algorithmus nicht gefunden wurde.
Dieses Problem impliziert, dass Sie keine Verarbeitungsalgorithmen aus QGIS ausführen können, wenn Sie Importe (zufällig) in der falschen Reihenfolge schreiben.
Ich habe in StackOverflow eingecheckt, aber laut spielt die Reihenfolge beim Importieren von Python keine Rolle. Der Style Guide für Python-Code fordert uns außerdem auf, zuerst Standardbibliotheken (allgemeinere Bibliotheken), dann Bibliotheken von verwandten Drittanbietern und schließlich lokale anwendungsspezifische Importe zu importieren. Ich denke, PyQt4 liegt in der 2. Kategorie der Importe, wohingegen PyQGIS lokal anwendungsspezifisch wäre, so dass PyQt4-Importe an erster Stelle stehen sollten (ich bin jedoch kein Experte in diesem Bereich).
Haben Sie eine Idee, warum dies passieren könnte? Haben Sie jemals etwas Ähnliches erlebt?
EDIT 1: Implizite Importe ( from abc import *
) wurden durch explizite (z. B. from abc import xyz
) geändert , wie von @ mike-t vorgeschlagen.