ฉันเจอปัญหาแปลก ๆ ในขณะที่เรียกใช้สคริปต์ประมวลผล 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 นำเข้าเรื่องการสั่งซื้อการสั่งซื้อไม่ควรสำคัญจริงๆ ยิ่งไปกว่านั้นStyle Guide for Python Codeบอกให้เรานำเข้าไลบรารี่มาตรฐาน (ทั่วไปมากกว่า) ก่อนจากนั้นจึงทำการไลบรารี่ของบุคคลที่สามและสุดท้ายคือการนำเข้าเฉพาะแอพพลิเคชั่นในท้องถิ่น ฉันคิดว่า PyQt4 อยู่ในประเภทที่ 2 ของการนำเข้าในขณะที่ PyQGIS จะเป็นแอปพลิเคชันเฉพาะในท้องถิ่นดังนั้นการนำเข้า PyQt4 ควรมาก่อน (ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้)
คุณมีความคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้นได้หรือไม่? คุณเคยเจออะไรที่คล้ายกันบ้างไหม?
แก้ไข 1: เปลี่ยนการนำเข้าโดยนัย ( from abc import *
) โดยรายการที่ชัดเจน (เช่นfrom abc import xyz
) ตามที่แนะนำโดย @ mike-t