Bağımsız PyQGIS işleme komut dosyalarını çalıştırırken garip bir sorunla karşılaştım. Koddaki içe aktarma sırası normal yürütülmesini etkiler.
Bir Python konsolu açıp aşağıdaki komut dosyasını girerek sorunu yeniden oluşturabilirsiniz (GNU / Linux, QGIS 2.6.1, v.2.2.0-2 işleme eklentisini ve Python 2.7.3'ü kullanıyorum):
# 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()
Şunları elde etmelisiniz:
ALGORITHM: Create grid
HSPACING <ParameterNumber>
VSPACING <ParameterNumber>
WIDTH <ParameterNumber>
HEIGHT <ParameterNumber>
CENTERX <ParameterNumber>
CENTERY <ParameterNumber>
GRIDTYPE <ParameterSelection>
CRS <ParameterCrs>
SAVENAME <OutputVector>
Öte yandan, ithalat sırasını (satır 3 ve 4) değiştirirseniz, bu şekilde:
from PyQt4.QtGui import QApplication
from qgis.core import QgsApplication
None
algoritma bulunamadığı için komut dosyası şimdi ... döndürüyor .
Bu sorun, içe aktarma işlemlerini yanlış sırada yazıyorsanız, QGIS dışında işleme algoritmalarını çalıştıramayacağınız anlamına gelir.
StackOverflow kontrol ettik ama göre Python ithalat sipariş önemli , sipariş gerçekten önemli olmamalı. Dahası, Python Kodu için Stil Kılavuzu bize önce standart (daha genel) kütüphaneleri, daha sonra ilgili üçüncü taraf kütüphanelerini ve son olarak yerel uygulamaya özel ithalatları aktarmamızı söyler. Bence PyQt4 2. ithalat kategorisinde yer alırken, PyQGIS yerel uygulamaya özgü olacaktır, bu yüzden PyQt4 ithalatı önce gelmelidir (Bununla ilgili bir uzman değilim).
Bunun neden olabileceği hakkında bir fikriniz var mı? Hiç benzer bir şey yaşadın mı?
DÜZENLEME 1: Değiştirilmiş örtülü ithalat ( from abc import *
açık olanlar (örneğin, ile) from abc import xyz
'Mike-t tarafından önerilen).