背景
2ヶ月前に大学の研究室に配属され、実行環境として研究室内の高性能サーバーを提供された。
そこで実際に Python の開発、実行を何度か試してみたのだが、リモート環境での実行はローカル環境での実行と比にならないくらいしんどかったため、改善を試みることにした。
この記事が、僕のようなリモート環境初心者達の助けになれば幸いである。
まず、従来僕が行なっていたローカル環境での開発フローは以下の通りである。
ローカル環境での開発フロー
- ローカル環境にて PyCharm という IDE で python のソースコードを作成
- そのまま PyCharm もしくはターミナルからソースコードを実行
この通り、ローカル環境では開発から実行までスムーズに行えており、特にストレスを感じずに開発を行えていた。
それに対しリモート環境での開発フローは以下の通りである。
リモート環境での開発フロー
- ローカル環境にて PyCharm という IDE で python のソースコードを作成
- ローカル環境で作成したソースコードを、ssh 接続を用いてリモート環境にアップロード
- ローカル環境で構築していた Python 環境をリモート環境で再現
- リモート環境のターミナルからソースコードを実行
この通り、開発からかなり煩雑な手順を経なければ実行に漕ぎ着けない。
さらに、リモート環境でエラーが出力されたり、リモート環境のコードや状況を更新する際にも同様に煩雑な手順が必要になるため、流石にこの環境で研究を行うのは無理があると感じた。
そこで、リモート環境での開発フローをローカル環境での開発フローになるべく近づけることを目標に開発環境の改善を行なった。
PyCharm の SSH 接続サポート
まずは、愛用している IDE である PyCharm を引き続き使いたいという思いから PyCharm が SSH 接続に対応しているか調べてみると、丁度先月アップロードされた SSH 接続マニュアルが存在したので、これに則って環境構築を進めていくことにする。
ちなみに、PyCharm には日本語版の SSH 接続マニュアルも存在するが、和訳が割とふわっとしていて微妙に理解しづらいので、個人的には英語版の SSH 接続マニュアルを読むことを推奨する。
環境構築手順
- 開発環境を構築したいプロジェクトで
Settings > Python Interpreter
からAdd Interpreter > On SSH...
をクリック
-
New Target: SSH
というウィンドウが開くので、Host:
の部分にリモート環境に接続する際のhost
を、Username:
の部分にusername
を、Port:
の部分にport
を入力してNext
をクリック1
- このように、
Introspection completed
というメッセージが出れば成功!Next
をクリック
- リモート環境の
Python Interpreter
を指定する画面に遷移するので、ローカル環境のPython Interpreter
を指定するときと同様に、実行時に使いたい環境を選択する。今回はリモート環境で構築したAnaconda
を用いるが、リモート環境で作成した仮想環境py3114
がUse existing environment
の選択肢に表示されている
-
Sync folders
の右側のディレクトリアイコンを選択すると、ローカルの作業環境を同期させたいリモートの作業環境を指定するウィンドウが表示される。この右側のRemote Path
の欄にリモート環境でプロジェクト用に割り当てたい領域を指すパスを指定する
-
Execute code with root privileges via sudo
のチェックボックスは、リモート環境において root 権限を持った状態でコードを実行させるかどうかを表す
また、Automatically upload project files to the server
のチェックボックスは、ローカル環境の差分を自動的にリモート環境にアップロードするかどうかを表す
- 最後に右下の
Create
をクリック
上記の手順が終わるとローカル環境からのファイルのアップロードが始まる。
これで晴れて、リモートのインタプリタを使用可能でファイルの同期が自動的に行われる開発環境を構築できた。
お疲れ様でした。
-
ここでいう
host
やusername
は、ssh
コマンドを用いてリモート環境に接続する際のssh username@host
というフォーマットのusername
やhost
の部分を指している。また、port
に関しては基本的には22
であるが、他のポート番号を用いている場合もあるため、詳しくはリモート環境の管理者に聞いていただければ確実だと思われる。 ↩