Я столкнулся со странной проблемой при запуске автономных сценариев обработки 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.