Saya sedang mengembangkan plugin Python, targetnya adalah mengintegrasikan ke dalam QGIS fungsi-fungsi pustaka PyPI Python yang disebut 'elevation'.
Apakah ada cara independen OS untuk menginstal pustaka Python eksternal dan membuatnya tersedia untuk plugin Python?
Saya sudah tahu prosedur khusus sistem yang berbeda untuk menginstal ketergantungan Python eksternal, yang ingin saya lakukan adalah mendistribusikan plugin saya di lingkungan yang berbeda tanpa membuat orang menjadi gila.
Apa yang sudah saya ketahui
Mencari di web dan pertanyaan serupa lainnya sepertinya tidak ada solusi independen OS.
Pengguna Windows
Python dikemas dan didistribusikan di dalam paket QGIS, jadi untuk menginstal pustaka Python eksternal Anda harus melalui OSGeo4W Shell dan menggunakan pip dari sana.
tautan yang berhubungan:
- Modul mandiri dan Python QGIS
- Menginstal Python setuptools ke OSGeo4W Python
- Bagaimana cara menginstal perpustakaan python pihak ke-3 untuk QGIS di Windows?
Pengguna OS X
Dalam hal ini QGIS menggunakan Python bawaan yang dipaket dalam OS X dan terletak di:
/usr/bin/python
Masalahnya di sini adalah bahwa pip yang diinstal default memiliki beberapa keterbatasan dan membutuhkan terlalu banyak hak istimewa.
Solusi cepatnya adalah menggunakan home-brew untuk menginstal Python sehingga pip Anda dapat berjalan melawan kerangka Python yang dapat dimodifikasi pengguna. Lihat detail dari pendekatan ini di sini .
Setelah menginstal semua pustaka Python melalui pip, Anda hanya perlu menambahkan direktori mereka ke variabel PATH.
Cara alternatif untuk pengguna OS X
Di dalam kode Python plugin Anda dapat menggunakan pip yang disediakan oleh sistem untuk menginstal paket yang diperlukan. Kemudian Anda dapat membuat paket yang baru diinstal dapat dicapai dengan menambahkannya ke jalur.
import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")
Solusi buatan sendiri tetapi berfungsi (diuji pada Linux dan OS X)
Saya memutuskan untuk mencari cara alternatif karena memungkinkan untuk menjaga pembaruan dan pemeliharaan perpustakaan terpisah dari plugin. Setiap kali pengguna baru menginstal plugin, versi terbaru dari elevation library langsung diunduh dan diinstal oleh pip di dalam subdirektori plugin.
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)