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)
sumber
Jawaban:
Saya menderita melalui masalah ini untuk menjalankan skrip Python di QGIS yang tergantung pada pustaka Python eksternal. Solusi paling mudah adalah dengan menginstal Boundless Desktop yang datang dengan baris perintah dan menginstal python sendiri. Menggunakan baris perintah Anda dapat menjalankan dan menginstal (menggunakan pip) paket python eksternal.
sumber
Saya mengerjakan ini sedikit pada proyek baru-baru ini. Sayangnya tidak ada cara yang bagus untuk mencapai ini. Solusi Anda sangat mirip dengan apa yang saya buat, tetapi tidak ada jaminan pengguna bahkan telah menginstal pip.
Saya akhirnya menyertakan salinan get_pip.py dan menggunakan execfile () untuk menjalankannya jika tidak tersedia.
Mirip dengan solusi akhir Anda:
Alternatif, tentu saja, adalah memasukkan perpustakaan itu sendiri ke direktori plugin Anda. Anda berisiko menyediakan versi lama, tetapi secara teoritis itu tidak masalah.
sumber
Mungkin Anda dapat mencoba virtualenv untuk menginstal dependensi eksternal. Dengan cara ini, Anda tidak perlu khawatir (sebanyak) tentang lingkungan sistem.
https://www.fullstackpython.com/application-dependencies.html
sumber
Ini bekerja untuk saya (dalam def (diri)):
dan mengatur virtualenv.
Dengan Windows sepertinya cerita yang berbeda. Saya kesulitan menginstal matplotlib.
sumber