Saya telah menemukan masalah aneh saat menjalankan skrip pemrosesan PyQGIS mandiri. Urutan impor dalam skrip memengaruhi eksekusi normal.
Anda dapat mereproduksi masalah dengan membuka konsol Python dan memasukkan skrip berikut (saya menggunakan GNU / Linux, QGIS 2.6.1, memproses plugin v.2.2.0-2, dan 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()
Anda harus mendapatkan:
ALGORITHM: Create grid
HSPACING <ParameterNumber>
VSPACING <ParameterNumber>
WIDTH <ParameterNumber>
HEIGHT <ParameterNumber>
CENTERX <ParameterNumber>
CENTERY <ParameterNumber>
GRIDTYPE <ParameterSelection>
CRS <ParameterCrs>
SAVENAME <OutputVector>
Di sisi lain, jika Anda mengganti urutan impor (baris 3 dan 4), dengan cara ini:
from PyQt4.QtGui import QApplication
from qgis.core import QgsApplication
skrip sekarang kembali ... None
, karena algoritme tidak ditemukan.
Masalah ini menyiratkan bahwa Anda tidak dapat menjalankan pemrosesan algoritma dari QGIS jika Anda (kebetulan) menulis impor dengan urutan yang salah.
Saya sudah memeriksa di StackOverflow tetapi menurut Do Python import order order , ordernya tidak terlalu penting. Selain itu, Panduan Gaya untuk Kode Python memberitahu kita untuk mengimpor pustaka standar (lebih umum) terlebih dahulu, kemudian pustaka pihak ketiga terkait, dan akhirnya, impor khusus aplikasi lokal. Saya pikir PyQt4 terletak pada kategori impor ke-2, sedangkan PyQGIS akan spesifik untuk aplikasi lokal, jadi impor PyQt4 harus didahulukan (walaupun saya bukan ahli dalam hal ini).
Apakah Anda punya ide mengapa ini bisa terjadi? Pernahkah Anda mengalami hal serupa?
EDIT 1: Mengubah impor implisit ( from abc import *
) oleh yang eksplisit (misalnya, from abc import xyz
) seperti yang disarankan oleh @ mike-t.