Bir Python eklentisi geliştiriyorum, hedef 'yükseklik' olarak adlandırılan bir PyPI Python kütüphanesinin işlevlerini QGIS ile bütünleştiriyor.
Harici Python kütüphaneleri kurmanın ve onları Python eklentileri için kullanılabilir kılmanın işletim sisteminden bağımsız bir yolu var mı?
Harici bir Python bağımlılığı kurmak için farklı sisteme özgü prosedürleri zaten biliyorum, yapmak istediğim, insanları çıldırtmadan eklentimi farklı ortamlara dağıtmak.
Ne biliyordum
Web'de ve diğer benzer sorularda arama yapmak, işletim sisteminden bağımsız bir çözüm bulunmuyor gibi görünüyor.
Windows kullanıcıları
Python, QGIS paketi içinde paketlenir ve dağıtılır, bu nedenle harici Python kütüphanelerini kurabilmek için OSGeo4W Shell'den geçmeli ve oradan pip kullanmalısınız.
İlgili Bağlantılar:
- QGIS bağımsız ve Python modülleri
- Python kurulum araçlarını OSGeo4W Python'a kurmak
- QGIS için 3. parti python kütüphaneleri Windows'ta nasıl kurulur?
OS X Kullanıcıları
Bu durumda QGIS, OS X içinde önceden paketlenmiş ve şu adreslerde bulunan yerleşik Python'u kullanır:
/usr/bin/python
Buradaki sorun, varsayılan yüklenen piponun bazı sınırlamaları olması ve çok fazla ayrıcalık gerektirmesidir.
Hızlı bir çözüm, Pip'inizin kullanıcı tarafından değiştirilebilen bir Python çerçevesine karşı çalışabilmesi için Python'u kurmak için ev demiri kullanmaktır. Bu yaklaşımın ayrıntılarına buradan bakın .
Tüm Python kütüphanelerini pip üzerinden yükledikten sonra, dizinlerini PATH değişkenine eklemeniz yeterlidir.
OS X kullanıcıları için alternatif yol
Eklenti Python kodu içinde, gerekli paketleri kurmak için sistem tarafından sağlanan pip'i kullanabilirsiniz. Daha sonra, yeni kurulan paketi yola ekleyerek ulaşılabilir hale getirebilirsiniz.
import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")
Ev yapımı ancak çalışma çözümü (hem Linux hem de OS X'te test edilmiştir)
Kütüphane güncellemesini ve bakımını eklentiden ayrı tutmaya izin verdiği için alternatif yoldan gitmeye karar verdim. Yeni bir kullanıcı eklentiyi her yüklediğinde, yükseltme kütüphanesinin en son sürümü eklentinin bir alt dizinine pip tarafından doğrudan indirilir ve yüklenir.
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)