私はPythonプラグインを開発しています。ターゲットは「昇格」と呼ばれるPyPI Pythonライブラリの機能をQGISに統合しています。
外部Pythonライブラリをインストールし、Pythonプラグインで使用できるようにするOSに依存しない方法はありますか?
外部のPython依存関係をインストールするためのさまざまなシステム固有の手順を既に知っています。私がやりたいのは、人々を夢中にさせずにさまざまな環境にプラグインを配布することです。
私がすでに知っていること
Webやその他の同様の質問を検索すると、OSに依存しないソリューションはないようです。
Windowsユーザー
PythonはQGISパッケージ内にパッケージ化されて配布されているため、外部Pythonライブラリをインストールするには、OSGeo4Wシェルを介してそこからpipを使用する必要があります。
関連リンク:
- QGISスタンドアロンおよびPythonモジュール
- Python setuptoolsをOSGeo4W Pythonにインストールする
- WindowsでQGISにサードパーティのPythonライブラリをインストールする方法は?
OS Xユーザー
この場合、QGISはOS X内にプリパッケージされ、次の場所にある組み込みPythonを使用します。
/usr/bin/python
ここでの問題は、デフォルトでインストールされるpipにはいくつかの制限があり、必要な特権が多すぎることです。
簡単な回避策は、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)