Під час запуску автономних сценаріїв обробки 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 Code вказує нам на те, щоб спочатку імпортувати стандартні (більш загальні) бібліотеки, потім відповідні сторонні бібліотеки та, нарешті, імпорт локальних додатків. Я думаю, що PyQt4 лежить у 2-й категорії імпорту, тоді як PyQGIS був би специфічним для місцевого застосування, тому імпорт PyQt4 повинен стати першим (я, однак, не знаю цього питання).
Чи маєте ви уявлення, чому це могло статися? Ви коли-небудь відчували щось подібне?
EDIT 1: Змінено неявний імпорт ( from abc import *
) за допомогою явних (наприклад, from abc import xyz
) пропозицій @ mike-t.