Я столкнулся со странной проблемой при запуске автономных сценариев обработки PyQGIS. Порядок импорта в сценарии влияет на его нормальное выполнение.
Вы можете воспроизвести проблему, открыв консоль Python и введя следующий скрипт (я использую GNU / Linux, QGIS 2.6.1, плагин обработки v.2.2.0-2 и 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()
Вы должны получить:
ALGORITHM: Create grid
HSPACING <ParameterNumber>
VSPACING <ParameterNumber>
WIDTH <ParameterNumber>
HEIGHT <ParameterNumber>
CENTERX <ParameterNumber>
CENTERY <ParameterNumber>
GRIDTYPE <ParameterSelection>
CRS <ParameterCrs>
SAVENAME <OutputVector>
С другой стороны, если вы измените порядок импорта (строки 3 и 4), то это так:
from PyQt4.QtGui import QApplication
from qgis.core import QgsApplication
сценарий теперь возвращается ... None, потому что алгоритм не был найден.
Эта проблема подразумевает, что вы не можете запускать алгоритмы обработки из QGIS, если вы (случайно) пишете импорт в неправильном порядке.
Я проверил в StackOverflow, но в зависимости от того, имеет ли значение порядок импорта Python , порядок не должен иметь значения. Более того, в Руководстве по стилю для кода Python говорится, что мы сначала должны импортировать стандартные (более общие) библиотеки, затем связанные сторонние библиотеки и, наконец, импортировать специфичные для локальных приложений приложения. Я думаю, что PyQt4 находится во 2-й категории импорта, тогда как PyQGIS будет зависеть от локального приложения, поэтому импорт PyQt4 должен стоять первым (хотя я не эксперт в этом, хотя).
У вас есть идея, почему это может произойти? Вы когда-нибудь испытывали нечто подобное?
РЕДАКТИРОВАТЬ 1: Изменен неявный import ( from abc import *) на явный (например, from abc import xyz), как предложено @ mike-t.