在运行独立的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属于进口的第二大类,而PyQGIS则是针对本地应用的,因此PyQt4的进口应排在首位(不过,我不是专家)。
您是否知道为什么会发生这种情况?您是否经历过类似的经历?
编辑1:按照@ mike-t的建议,将隐式导入(from abc import *
)更改为显式导入(例如from abc import xyz
)。