ฉันกำลังพัฒนาปลั๊กอิน Python เป้าหมายกำลังรวมเข้ากับ QGIS ซึ่งเป็นฟังก์ชันของไลบรารี PyPI Python ที่เรียกว่า 'การยกระดับ'
มีวิธีที่เป็นอิสระจากระบบปฏิบัติการของการติดตั้งห้องสมุด Python ภายนอกและทำให้พวกเขาสามารถใช้ได้กับปลั๊กอิน Python
ฉันรู้แล้วว่าขั้นตอนเฉพาะของระบบที่แตกต่างกันสำหรับการติดตั้งการพึ่งพา Python ภายนอกสิ่งที่ฉันต้องการจะทำคือการเผยแพร่ปลั๊กอินของฉันในสภาพแวดล้อมที่แตกต่างกันโดยไม่ทำให้ผู้คนคลั่งไคล้
สิ่งที่ฉันรู้แล้ว
ค้นหาเว็บและคำถามที่คล้ายกันอื่น ๆ ดูเหมือนว่าไม่มีวิธีแก้ไขปัญหา OS แบบอิสระ
ผู้ใช้งาน Windows
Python ได้รับการบรรจุและแจกจ่ายภายในแพ็คเกจ QGIS ดังนั้นในการติดตั้ง Python library ภายนอกคุณต้องผ่าน OSGeo4W Shell และใช้ pip จากที่นั่น
ลิงก์ที่เกี่ยวข้อง:
- QGIS สแตนด์อะโลนและโมดูล Python
- การติดตั้ง Python setuptools ลงใน OSGeo4W Python
- วิธีการติดตั้งไลบรารี่ของบุคคลที่สามสำหรับ QGIS บน Windows
ผู้ใช้ OS X
ในกรณีนี้ QGIS ใช้ Python ในตัวซึ่งได้รับการบรรจุล่วงหน้าใน OS X และอยู่ที่:
/usr/bin/python
ปัญหาที่นี่คือจุดเริ่มต้นที่ติดตั้งไว้มีข้อ จำกัด บางอย่างและต้องใช้สิทธิ์มากเกินไป
วิธีแก้ปัญหาอย่างรวดเร็วคือใช้ home-brew เพื่อติดตั้ง Python เพื่อให้ pip ของคุณสามารถทำงานกับกรอบ Python ที่ผู้ใช้สามารถแก้ไขได้ ดูรายละเอียดของวิธีการนี้ที่นี่
หลังจากติดตั้งไลบรารี Python ทั้งหมดผ่าน pip คุณเพียงแค่เพิ่มไดเรกทอรีของพวกเขาไปยังตัวแปร PATH
ทางเลือกสำหรับผู้ใช้ OS X
ภายในโค้ด Python ของปลั๊กอินคุณสามารถใช้ pip ที่ระบบจัดเตรียมไว้ให้เพื่อติดตั้งแพ็คเกจที่ต้องการ จากนั้นคุณสามารถทำให้แพคเกจที่เพิ่งติดตั้งสามารถเข้าถึงได้เพิ่มเข้าไปในเส้นทาง
import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")
โฮมเมด แต่วิธีการทำงาน (ทดสอบบน Linux และ OS X)
ฉันตัดสินใจที่จะใช้วิธีอื่นเนื่องจากจะทำให้การอัปเดตห้องสมุดและการบำรุงรักษาแยกจากปลั๊กอิน ทุกครั้งที่ผู้ใช้ใหม่ติดตั้งปลั๊กอินเวอร์ชันล่าสุดของไลบรารีการยกระดับความสูงจะถูกดาวน์โหลดและติดตั้งโดยตรงโดย pip ภายในไดเรกทอรีย่อยของปลั๊กอิน
self.plugin_dir = os.path.dirname(__file__)
self.elevation_dir = os.path.join(self.plugin_dir, 'elevation')
# Checking the presence of elevation library
try:
import elevation
except:
pip.main(['install', '--target=%s' % self.elevation_dir, 'elevation'])
if self.elevation_dir not in sys.path:
sys.path.append(self.elevation_dir)