16.3. プラグインを書いてデバッグするためのIDE設定
プログラマには皆それぞれ自分の好みのIDE /テキストエディタがありますが、ここに人気のIDEを設定し、QGISの Pythonプラグインを書いたりデバッグするためのいくつかの推奨事項があります。
16.3.1. Pythonプラグインを書くのに便利なプラグイン
Pythonプラグインを書くときに便利なプラグインがあります。
から次をインストールします:Plugin reloader: これにより、QGISを再起動することなくプラグインを再読み込みし、新しい変更を取り込むことができます。
First Aid: これは、プラグインから例外が発生したときに変数を検査するためのPythonコンソールとローカルデバッガを追加します。
警告
Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.
16.3.2. LinuxとWindowsでIDEを設定する際の注意点
Linux では、通常、QGISライブラリの場所をユーザの PYTHONPATH
環境変数に追加するだけです。ほとんどのディストリビューションでは、~/.bashrc
または ~/.bash-profile
を以下の行で編集することでこれを行うことができます(OpenSUSE Tumbleweed でテスト済み):
export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"
ファイルを保存し、以下のシェルコマンドを使って環境設定を実行します:
source ~/.bashrc
**Windows**では、QGISと同じ環境設定にし、QGISと同じライブラリとインタプリタを使用する必要があります。一番手っ取り早い方法は、QGISのスタートアップバッチファイルを変更することです。
OSGeo4Wインストーラを使用した場合はOSGeo4Wインストールの bin
フォルダの下にこれを見つけることができます。 C:\OSGeo4W\bin\qgis-unstable.bat
のようなものを探してください。
16.3.3. Pyscripter IDEを使ってデバッグする (Windows)
Pyscripter IDE を使うには、次のようにします:
qgis-unstable.bat
のコピーを作成し、pyscripter.bat
に名前を変更します。それをエディタで開きます。そして最後の行、QGISを起動する行を削除してください。
Pyscripter実行ファイルを指す行を追加し、使用するPythonのバージョンを設定するコマンドライン引数を追加します
さらに、QGISが使用するPythonのDLLをPyscripterが見つけられるフォルダーを指す引数を追加します。これはOSGeoWインストールのbinフォルダーの下に見つけることができます
@echo off SET OSGEO4W_ROOT=C:\OSGeo4W call "%OSGEO4W_ROOT%"\bin\o4w_env.bat call "%OSGEO4W_ROOT%"\bin\gdal16.bat @echo off path %PATH%;%GISBASE%\bin Start C:\pyscripter\pyscripter.exe --python25 --pythondllpath=C:\OSGeo4W\bin
このバッチファイルをダブルクリックすると、正しいパスでPyscripterが起動します。
Pyscripterよりも人気のあるEclipseは、開発者の間で一般的な選択肢です。次のセクションでは、プラグインの開発とテストのためにEclipseを設定する方法を説明します。
16.3.4. EclipseとPyDevを使ってデバッグする
16.3.4.1. インストール
Eclipseを使うには、以下をインストールしてください
QGIS 2.x
QGISのプラグインである Remote Debug をインストールすることもできます。現時点ではまだ実験的なプラグインなので、あらかじめ 実験的プラグインも表示 を有効にしてください。
で
WindowsでEclipseを使用する環境を準備するために、バッチファイルを作成し、それを使用してEclipseを起動する必要があります:
qgis_core.dll
が存在するフォルダーを探します。通常、これはC:∕OSGeo4W∕Apps∕qgis∕bin
ですが、自分の QGIS アプリケーションをコンパイルした場合、これはビルドフォルダのoutput/bin/RelWithDebInfo
にありますeclipse.exe
実行ファイルを探します。以下のスクリプトを作成し、QGISプラグイン開発時にeclipseの起動に使います。
call "C:\OSGeo4W\bin\o4w_env.bat" set PATH=%PATH%;C:\path\to\your\qgis_core.dll\parent\folder start /B C:\path\to\your\eclipse.exe
16.3.4.2. Eclipseをセットアップする
Eclipseで、新しいプロジェクトを作成します。 一般的なプロジェクト を選択しておいて本当のソースを後でリンクできるので、このプロジェクトをどこに配置するかは実際は問題になりません。
新しいプロジェクトを右クリックして
を選びます。詳細 をクリックし、 別の場所に リンク(リンクフォルダ) を選択します。すでにデバッグしたいソースがある場合はこれらを選択してください。そうでない場合は、すでに説明したようにフォルダを作成してください。
するとビュー プロジェクトエクスプローラ で、ソースツリーがポップアップしますので、コードでの作業を開始できます。すでに利用可能な構文の強調表示や他のすべての強力なIDEツールが使用できるようになっています。
16.3.4.3. デバッガを設定する
デバッガが動くようにするには:
Eclipseでデバッグパースペクティブに切り替えます(
)。を選んでPyDev デバッグサーバーを起動します。
EclipseはQGISからデバッグサーバーへの接続を待っています。QGISがデバッグサーバーに接続すると、Pythonスクリプトを制御できます。それはまさに私たちが Remote Debug プラグインをインストールしたものです。だからまだ起動していなければQGISを起動し、バグのシンボルをクリックしてください。
ここでブレークポイントを設定できます。コードがそこに達すると実行は停止し、プラグインの現在の状態を検査できます。(ブレークポイントは下の画像の緑色の点です。ブレークポイントを設定したい行の左空白でダブルクリックすることで設定します)。
今利用できる非常に興味深いものはデバッグコンソールです。先に進む前に、現在実行がブレークポイントで停止していることを確認してください。
コンソールビューを開きます(Debug Server コンソールが表示されます。しかし Open Console というボタンがあり、これを押すともっと面白い PyDev デバッグコンソールに切り替えることができます。
)。あまり面白くないコンソールを開く ボタンの横にある矢印をクリックし、PyDevコンソール を選択します。どのコンソールを起動するかを尋ねるウィンドウが開きます。
PyDevデバッグコンソール を選択します。それがグレイアウトしていて、デバッガを開始して有効なフレームを選択するように指示された場合は、リモートデバッガが接続されていて、現在ブレークポイント上にあることを確認してください。
これで、現在のコンテキストから任意のコマンドをテストできる対話型コンソールが完成しました。変数を操作したり、APIを呼び出したり、好きなことができます。
Tip
ちょっと面倒なのですが、コマンドを入力するたびコンソールはデバッグサーバーに戻ります。この動作を停止するには、デバッグサーバーページで Pin Console ボタンをクリックしますが、少なくとも現在のデバッグセッションではこの決定は記憶されます。
16.3.4.4. EclipseにAPIを理解させる
非常に便利な機能は、Eclipseが実際にQGISのAPIについてわかっているようにすることです。これにより、タイプミスがないかコードを確認できます。これだけでなく、EclipseでのインポートからAPI呼び出しへ自動入力する支援を可能にします。
これを行うため、EclipseではQGISライブラリファイルを解析し、そこにすべての情報を取得します。しなければならないことは、どこのライブラリを検索するかをEclipseに伝えることだけです。
をクリック。
ウィンドウの上部と下部にいくつかのタブで設定済みのPythonインタプリタ(現在QGISのためのpython2.7)が表示されます。私たちにとって興味深いタブは、 ライブラリ および 強制ビルトイン です。
最初にライブラリタブを開きます。
新しいフォルダーを追加し、QGISのインストールにあるpythonフォルダーを選択します。このフォルダーがどこにあるかわからない場合(pluginsフォルダーではない場合):
QGISを開く
pythonコンソールを開始する
qgis
を入力するEnterを押す。どのQGISモジュールを使用しているか、そのパスが表示されます。
このパスから末尾の
/qgis/__init__.pyc
を取り除けば、目的のパスが得られます。
pluginsフォルダーもここに追加してください( user profile フォルダーの下の
python/plugins
にあります)。次に Forced Builtins タブにジャンプし、New... をクリックして
qgis
と入力します。これでEclipseがQGIS APIを解析するようになります。おそらく、EclipseにPyQt APIについても知ってもらいたいでしょう。そのため、PyQtを強制ビルトインとして追加します。おそらくライブラリタブにはすでに存在しているはずです。OK をクリックして完了です。
注釈
QGIS APIが変更されるたびに(例えばQGIS masterをコンパイルしていてSIPファイルが変更された場合など)、このページに戻って Apply をクリックだけしてください。これでEclipseがすべてのライブラリを再度解析します。
16.3.5. UbuntuでコンパイルしたQGISをPyCharmでデバッグする
PyCharmはJetBrains社が開発したPython用のIDEです。Community Editionという無料版とProfessionalという有料版があります。PyCharmはウェブサイト https://www.jetbrains.com/pycharm/download からダウンロードできます
Ubuntu上で指定されたビルドディレクトリ ~/dev/qgis/build/master
でQGISをコンパイルしたと仮定します。自分でコンパイルしたQGISであることは必須ではありませんが、それでテストしています。パスは合わせる必要があります。
PyCharmの Project Properties, Project Interpreter に
QGIS
というPython仮想環境を作成します。小さな歯車と次に Add をクリックします。
Virtualenv environment を選びます。
すべてのプラグインにこのPythonインタプリタを使用するため、
~/dev/qgis/venv
のように、すべてのPythonプロジェクトの一般的な場所を選択します。あなたのシステムで利用可能なPython 3ベースのインタプリタを選択し、次の2つのオプション、Inherit global site-packages と Make available to all projects をチェックしてください。
OK をクリックし、小さな歯車に戻り、:guilabel:`Show all`をクリックします。
新しいウィンドウで、新しいインタプリタ
QGIS
を選択し、垂直メニューの最後のアイコン Show paths for the selected interpreter. をクリックします。最後に次の絶対パスをリストに加えます:
~/dev/qgis/build/master/output/python
PyCharmを再起動すると、すべてのプラグインでこの新しいPython仮想環境を使い始めることができます。
PyCharm は QGIS API を認識し、from qgis.PyQt.QtCore import QDir
のように QGIS が提供する Qt を使用する場合は PyQt API も認識します。オートコンプリートが機能し、PyCharmがコードを検査できるようになります。
PyCharmのプロフェッショナル版では、リモートデバッグはうまく動作しています。コミュニティ版ではリモートデバッグは利用できません。ローカルデバッガにアクセスできるのは、QGIS自身ではなく、PyCharmの 内部 で(スクリプトやunittestとして)実行されるコードだけです。Pythonコードを QGIS内で 実行する場合は、前述の First Aid プラグインを使用するときでしょう。
16.3.6. PDBを利用してデバッグする
EclipseやPyCharmのようなIDEを使用していない場合は、以下の手順でPDBを使用してデバッグできます。
まず、デバッグしたい場所に次のコードを追加します。
# Use pdb for debugging import pdb # also import pyqtRemoveInputHook from qgis.PyQt.QtCore import pyqtRemoveInputHook # These lines allow you to set a breakpoint in the app pyqtRemoveInputHook() pdb.set_trace()
次にQGISをコマンドラインから実行します。
Linuxではこうします:
$ ./Qgis
macOSではこうします:
$ /Applications/Qgis.app/Contents/MacOS/Qgis
そして、アプリケーションがブレークポイントに到達したら、コンソールに入力することができます!
- TODO:
テストの情報を加える