मैं स्टैंडअलोन PyQGIS प्रसंस्करण स्क्रिप्ट चलाते समय एक अजीब मुद्दे पर आया हूं। स्क्रिप्ट में आयात का क्रम इसके सामान्य निष्पादन को प्रभावित करता है।
आप पायथन कंसोल को खोलकर और निम्न स्क्रिप्ट में प्रवेश करके समस्या को पुन: उत्पन्न कर सकते हैं (मैं GNU / Linux, QGIS 2.6.1, प्रोसेसिंग प्लगइन v.2.2.0-2 और पायथन 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 में जाँच की है, लेकिन क्या पायथन आयात ऑर्डर मामले के अनुसार , ऑर्डर वास्तव में मायने नहीं रखता। इसके अलावा, पायथन कोड के लिए स्टाइल गाइड हमें मानक (अधिक सामान्य) पुस्तकालयों को पहले आयात करने के लिए कहता है, फिर संबंधित तीसरे पक्ष के पुस्तकालयों, और अंत में, स्थानीय अनुप्रयोग विशिष्ट आयात करता है। मुझे लगता है कि PyQt4 आयात की दूसरी श्रेणी में है, जबकि PyQGIS स्थानीय अनुप्रयोग विशिष्ट होगा, इसलिए PyQt4 आयात पहले आना चाहिए (मैं इस पर एक विशेषज्ञ नहीं हूं, हालांकि)।
क्या आपको अंदाजा है कि ऐसा क्यों हो सकता है? क्या आपने कभी ऐसा ही कुछ अनुभव किया है?
संपादित 1: @ माइक द्वारा सुझाए गए from abc import *
अनुसार स्पष्ट आयात ( ) में परिवर्तन (जैसे from abc import xyz
)।