プラグインを書いてデバッグするためのIDE設定

プログラマには皆それぞれ自分の好みのIDE /テキストエディタがありますが、ここに人気のIDEを設定し、QGISの Pythonプラグインを書いたりデバッグするためのいくつかの推奨事項があります。

Windows上でIDEを設定するメモ

Linuxではプラグインを開発するために必要な追加の構成はありません。しかし、Windows上では、同じ環境設定を持ち、QGISと同じライブラリとインタプリタを使用することを確認する必要があります。これを行うための最速の方法は、QGISの起動バッチファイルを変更することです。

OSGeo4Wインストーラを使用した場合はOSGeo4Wインストールの bin フォルダの下にこれを見つけることができます。 C:\OSGeo4W\bin\qgis-unstable.bat のようなものを探してください。

Pyscripter IDE を使用するために、しなければならないことは:

  • QGIS-unstable.bat のコピーを作成し、名前を pyscripter.bat に変更します。

  • エディタで開きます。そして、最後の行、QGISを起動するもの、を削除します。

  • Pyscripter実行ファイルを指す行を追加し、(QGIS >= 2.0 の場合は2.7)を使用する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が開始するようになります。

開発者の中ではEclipseがPyscripterよりも人気が高く、よく選択されます。以下のセクションでは、プラグインの開発とテストのためのプラグインの設定方法について説明します。 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
C:\path\to\your\eclipse.exe

Eclipse と PyDevを利用してデバッグする

インストール

Eclipseを使用するため、以下をインストールしたことを確認してください

QGISを準備する

QGIS自体でしておくべきいくつかの準備があります。二つのプラグインが関心の対象です: リモートデバッグプラグインの再ロード

  • プラグイン ‣ プラグインのインストールおよび管理... に行きます

  • リモートデバッグ を検索します(現時点では、それはまだ実験的ですので、それが表示されない場合は オプション タブ下の実験的なプラグインを有効にしてください)。それをインストールしてください。

  • プラグインの再ロード を検索し、またそれをインストールします。これにより、プラグインが再ロードされるようQGISを閉じて再起動しなくても、プラグインを再ロードできます。

Eclipseをセットアップする

Eclipseで、新しいプロジェクトを作成します。 一般的なプロジェクト を選択しておいて本当のソースを後でリンクできるので、このプロジェクトをどこに配置するかは実際は問題になりません。

../../_images/eclipsenewproject.png

Eclipse プロジェクト

今、新しいプロジェクトを右クリックし、 新規 ‣ フォルダ を選択します。

[詳細] をクリックし、 別の場所に リンク(リンクフォルダ) を選択します。すでにデバッグしたいソースがある場合はこれらを選択してください。そうでない場合は、すでに説明したようにフォルダを作成してください。

するとビュー プロジェクトエクスプローラ で、ソースツリーがポップアップしますので、コードでの作業を開始できます。すでに利用可能な構文の強調表示や他のすべての強力なIDEツールが使用できるようになっています。

デバッガを設定する

デバッガを稼働状況にするには、Eclipseでデバッグパースペクティブに切り替えます( ウィンドウ ‣ パースペクティブを開く ‣ その他 ‣ デバッグ )。

ここで PyDev ‣ デバッグサーバーの開始 を選択することにより、PyDevはデバッグサーバーを起動します。

EclipseはQGISからデバッグサーバーへの接続を待っています。QGISがデバッグサーバーに接続すると、Pythonスクリプトを制御できます。それはまさに私たちが Remote Debug プラグインをインストールしたものです。だからまだ起動していなければQGISを起動し、バグのシンボルをクリックしてください。

ここでブレークポイントを設定できます。コードがそこに達すると実行は停止し、プラグインの現在の状態を検査できます。(ブレークポイントは下の画像の緑色の点です。ブレークポイントを設定したい行の左空白でダブルクリックすることで設定します)。

../../_images/breakpoint.png

ブレークポイント

今利用できる非常に興味深いものはデバッグコンソールです。先に進む前に、現在実行がブレークポイントで停止していることを確認してください。

コンソールビューを開きます( ウィンドウ ‣ ビューを表示 )。あまり面白くない デバッグサーバー コンソールが表示されるでしょう。しかし、もっと面白いPyDevデバッグコンソールに変更できるボタン [コンソールを開く] があります。 [コンソールを開く] ボタンの隣にある矢印をクリックして、 PyDevコンソール を選択してください。ウィンドウが表示され、どのコンソールを起動したいかを尋ねてきます。 PyDevデバッグコンソール を選択してください。グレーアウトしており、デバッガを起動して有効なフレームを選択するよう言われた場合は、リモートデバッガが付属され現在ブレークポイント上にいることを確かめてください。

../../_images/console-buttons.png

PyDev デバッグコンソール

今はもうインタラクティブコンソールが使用できるので、現在のコンテキスト内から任意のコマンドをテストできます。変数を操作するとか、API呼び出しするとか、何でも好きにできます。

ちょっと面倒なのですが、コマンドを入力するたびコンソールはデバッグサーバーに戻ります。この動作を停止するには、デバッグサーバーページで Pin Console ボタンをクリックしますが、少なくとも現在のデバッグセッションではこの決定は記憶されます。

EclipseにAPIを理解させる

非常に便利な機能は、Eclipseが実際にQGISのAPIについてわかっているようにすることです。これにより、タイプミスがないかコードを確認できます。これだけでなく、EclipseでのインポートからAPI呼び出しへ自動入力する支援を可能にします。

これを行うため、EclipseではQGISライブラリファイルを解析し、そこにすべての情報を取得します。しなければならないことは、どこのライブラリを検索するかをEclipseに伝えることだけです。

ウィンドウ ‣ 設定 ‣ PyDev ‣ インタプリタ ‣ Python をクリック。

ウィンドウの上部と下部にいくつかのタブで設定済みのPythonインタプリタ(現在QGISのためのpython2.7)が表示されます。私たちにとって興味深いタブは、 ライブラリ および 強制ビルトイン です。

../../_images/interpreter-libraries.png

PyDev デバッグコンソール

まず[ライブラリ]タブを開きます。新規フォルダを追加し、QGISのインストールのPythonのフォルダを選択します。このフォルダがどこにあるか(それはプラグインフォルダではありません)わからない場合は、QGISを開き、Pythonのコンソールを起動し、簡単に qgis と入力してEnterを押します。使用するQGISモジュールとそのパスが表示されるでしょう。末尾の /qgis/__init__.pyc をこのパスから剥ぎ取ると、探しているパスになります。

プラグインフォルダもここに追加する必要があります(Linuxの場合 ~/.qgis2/python/plugins )。

次に 強制組込関数 タブにジャンプし、 新規... をクリックして qgis と入力してください。これでEclipseがQGISのAPIを解析するようになります。おそらくEclipseがPyQt4のAPIもわかるようにしたいでしょう。そのためには強制組込関数としてPyQt4も追加します。それはおそらく、すでにライブラリタブに存在しなければなりません。

OK をクリックし、完了します。

ノート

QGIS APIが変更されるたびに(たとえば、QGISマスターをコンパイルしてSIPファイルを変更した場合)、このページに戻って 適用 をクリックする必要があります。これにより、Eclipseはすべてのライブラリを再び解析できます。

PDBを利用してデバッグする

EclipseなどのIDEを使用しない場合は、次の手順に従ってPDBを使用してデバッグできます。

まず、デバッグしたい場所にこのコードを追加します

# Use pdb for debugging
import pdb
# These lines allow you to set a breakpoint in the app
pyqtRemoveInputHook()
pdb.set_trace()

それから、コマンドラインからQGISを実行します。

Linuxでは以下を実行します:

$ ./Qgis

Mac OS Xでは以下を実行します:

$ /Applications/Qgis.app/Contents/MacOS/Qgis

アプリケーションがブレークポイントに到達したとき、コンソールで入力できます!

TODO:

テスト情報の追加