PythonのIDEであるPyCharmの売りとなる機能の一つとしてリモートデバッグ機能があります。
とても便利な機能ですが、使い方を日本語で解説してあるページがあまり無かったので、設定方法や便利な使い方を解説したいと思います。
※PyCharmのバージョンは"Professional 2016.3"で確認しています。
リモートデバッグの必要性
単純な構文ミスや毎回発生するバグなど、ほとんどのケースはローカルのデバッグで解決できます。しかし、環境に依存するバグや、特定のユーザーデータに起因するバグはローカルのデバッグで発見することは難しいです。
また、ローカル上に仮想環境を用意して、そこで実行するケースも多いかと思います。その場合でもリモートデバッグは有効です。
リモートデバッグと呼ばれる機能は2種類あるので、それぞれ説明していきます。
Python Debug Server方式
ローカルでデバッグサーバを起動し、リモートからアクセスさせる形式です。
リモートの準備
まずはリモート環境の準備です。
ローカルのPyCharmをインストールしたディレクトリ内にデバッグ用のアーカイブが置いてあるので、それをリモートサーバの適当な場所にコピーします。
scp /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg user@host:/path/to/pycharm-debug.egg
リモートサーバで上記のファイルのパスを通します。
環境変数「PYTHONPATH」に追加するか、プログラム上からsys.pathにパスを追加します。
例:sys.pathに追加する場合
import sys
sys.path.append('/path/to/pycharm-debug.egg')
ローカルの準備
次に、ローカルのサーバを呼び出す設定を追加します。
import pydevd
pydevd.settrace(192.168.1.1, port=12345, stdoutToServer=True, stderrToServer=True)
settraceの第1引数はローカルのホスト名(リモートとローカルが別ネットワークにある場合は、お互いにアクセスできるようにする必要があります)。
第2引数はローカルで待ち受けるポート番号になります。
以上で、準備は完了。
デバッグ実行
続いて、ローカルで待ち受けるサーバを起動します。
PyCharmの "Run/Debug Configurations" の設定で、左上の+ボタンから "Python Remote Debug" を選択します。
"Local host name" には先程のsettraceの第1引数で設定したローカルのホスト名。
"Port" には第2引数で指定したポート番号を入力します。
OKを押して、ブレークポイントを設定してからデバッグボタンをクリックすると、ローカルで待受状態になります。
リモートサーバのほうは普通にrunserver等で起動するだけです。
これで、ブラウザ等でリモートサーバにアクセスすると、ブレークポイントで停止してローカルのPyCharmからステップ実行等を行うことができます。
remote interpreter方式
こちらはsshで接続して、リモートのインタプリタを使う方式です。
利用頻度は少ないかもしれません。
なお、この方式は有料のProfessinalEditionでしか利用できないようです。
PyCharmの設定画面から"SSH Remote Run plugin"を有効にします。
次に 「設定 > Project: server > Project Interpreter」
"Project Interpreter" 横の歯車マークをクリックして、add Remoteを選択します。
SSH Credentialsを選択して、SSHでログインする情報を入力します。
path mappings 横のボタンをクリックして、ローカルのapplicationディレクトリとリモートのapplicationディレクトリを追加します。
これでinterpreter一覧にリモートサーバのインタプリタが追加されるので、ローカルで選択して動かすことができます。
最後に
Python Debug Server方式はpydevを実行するかたちになるので、ON/OFFの設定を簡単に切り替えられるようにして、必要なときだけONにして使うようにすると良いと思います。
設定は面倒ですが、かなり便利な機能なので、是非オススメです。