これがしたかったために、有償版を買った。
PyCharmを使った普通のリモートデバッグ環境の構築はたくさんあると思うので、 yoctoで作ったラズベリーパイ3向けの環境でリモートデバッグする環境を作る。
その際にハマったところピックアップする。
確実に名前でアクセスできるようにする
local.confに下記を追加して、確実に「raspberrypi3.local」でアクセスできるようにする。
詳細についてはavahi-autoipdでDHCPサーバが無い場所でもIP通信を参照。
# avahi IMAGE_INSTALL_append = " \ avahi-daemon \ avahi-autoipd \ "
リモートデバッグの設定
通常の手順でプロジェクトを作成した後に「File」->「Settings...」で設定ダイアログを出し、 左側のツリーの検索フィールドで「Project Interpreter」の項目を選択する
ダイアログ右端の歯車アイコンをクリックし「Add...」を選択する。
「Add Python Interpreter」ダイアログが表示されるので、画面左のリストから「SSH Interpreter」を選択する。
次の内容を入力し「Next」ボタンをクリックする。
項目 | 値 |
---|---|
Host | raspberrypi3.local |
Username | root |
Port | 22 |
次の画面でそのまま「Finish」ボタンをクリックする。
「java.io.IOException: inputstream is closed」のエラー
SSHインタプリタの追加画面で「Finish」ボタンをクリックした時に次のような画面が表示された場合は、 ターゲット側でSFTPサーバが動作していないことが疑われる。
回避するためには、次のようにlocal.confに追加する。
# ssh/sftp EXTRA_IMAGE_FEATURES += "ssh-server-openssh" IMAGE_INSTALL_append = " openssh-sftp-server"
PyCharmではターゲット側へのファイルの転送にSFTPを使用する。 dropbearのSFTPサーバでも良いかもしれないが、opensshのほうがおそらく無難。
イメージをSDに書きなおした後、再度SSHインタプリタの追加を実施する。
リモート側のインストール済みパッケージが表示されない
ターゲット側にpipがインストールされていないとこのようになる。
local.confで次を追加する。
# pip IMAGE_INSTALL_append = " python-pip"
「Couldn't refresh skeletons for remote interpreter」のエラー
リモートとの接続時に次のようなエラーが発生する。
Couldn't refresh skeletons for remote interpreter failed to run generator3.py for sftp://root@raspberrypi3.local:22/usr/bin/python, exit code 2, stderr: ----- /usr/bin/python: can't open file '/home/root/.pycharm_helpers/generator3.py': [Errno 2] No such file or directory -----
これは、SDにOSイメージを書き直した場合などに発生することが多く、その原因はPyCharmのリモートヘルパーパッケージがターゲット上で展開されていないためである。
リモートヘルパが正しく機能していないと、FlyCheckの処理でターゲットにインストールされているモジュールの解決がうまく行かないなどの症状が発生する。
このエラーを解消するためには、ターゲット側でリモートヘルパーパッケージを展開する必要がある。 一度SSHでターゲットにログインし、リモートヘルパーが転送済みか確認する。
ターゲット側で次のコマンドを実行する。
# cd ~/ # ls -la
この時点でホームディレクトリに「.pycharm_helpers」が存在しない場合は、PyCharmで一度Pythonスクリプトを実行してみる。 すると、ヘルパーパッケージがデプロイされるので、再度ホームディレクトリを確認する。 「.pycharm_helpers」の存在を確認した後で次のコマンドを実行する。
# cd ~/.pycharm_helpers # tar xvf ./helpers.tar.gz
tarの展開が終わったらPyCharmでメニューの「File」->「Invalidate Caches / Restart...」を選択する。
ダイアログの「Invalidate and Restart」ボタンを押しキャッシュをクリアとPyCharmの再起動を行う。
すると、再起動にリモートインタプリタの更新が開始され、これらの処理が終了すると正しくリモートと接続されるようになる。