【PyCharm】リモートインタプリタでライブラリ追加した際に正しく認識させる方法
# pycharm # python
Pythonの最強の統合開発環境(IDE)といえばIntelliJのPyCharmですよね。 (データサイエンスをしたい場合はJupyterになるとは思いますが…)
有料パッケージを購入すればですが、Dokcer環境での開発やssh接続でリモートの環境に合わせた開発もお手の物です。
ただ、PyCharmというかInleliJ社のIDEの仕組みに伴う問題があるのです。
リモートで追加したライブラリがIDEに反映されない
Docker環境で開発している際に、何かしらのライブラリをDocker内に潜るなどして追加します。もちろん追加できるのです。
ただ、コーディング中にいつまで経ってもライブラリが見つからないとの警告が出続けます。補完も全くしてくれません。 実際にコード実行やデバッグをした際には、インストールしたライブラリが使えるのにも関わらずです。これは非常に悩ましい問題です。
PyCharm自体を再起動すれば解決はするのですが、さすがに面倒ですよね…。多少はましになる方法を見つけたので書き記しておきます。
リモートでpip installしてもローカルに反映されない理由
PyCharmに代表されるInteliJのIDEは以下のような仕組みでリモート環境と差異のない開発を可能にしています。
リモート Pythonインタープリターが追加されると、まずPyCharmヘルパーがリモートホストにコピーされます。PyCharmヘルパーは、パッケージングタスク、デバッガ、テスト、その他のPyCharm機能をリモートで実行するために必要です。次に、バイナリライブラリのスケルトンが生成され、ローカルにコピーされます。また、すべてのPythonライブラリソースは、リモートホスト上のPythonパスから収集され、生成されたスケルトンとともにローカルにコピーされます。解決と補完が正しく機能するためには、スケルトンとすべてのPythonライブラリソースをローカルに格納する必要があります。PyCharmは、リモートを実行するたびにリモートヘルパーのバージョンを確認するため、PyCharmバージョンを更新すると、新しいヘルパーが自動的にアップロードされ、リモートインタープリターを再作成する必要はありません。SFTPサポートは、ヘルパーをサーバーにコピーするために必要です。
https://pleiades.io/help/pycharm/configuring-python-interpreter.html
シンプルに言えば、リモート環境のPythonやライブラリをローカルにダウンロードすることにより実行や補完を実現しているのです。
PyCharmではこのダウンロードしたライブラリをスケルトンと呼びます。
つまり、実際にリモート環境にアクセスしているわけではなく、疑似的にリモート環境をローカル構築しているだけですので、 再度リモート環境をローカルにダウンロードしない限りはリモートとローカルはずれたままとなります。
と、いうことでこいつをPyCharmの再起動なしにスケルトンを更新してあげましょう。
PyCharmを再起動しないでインストールしたライブラリに補完を利かせる方法
- 設定画面を開き、歯車アイコンをクリック
- ツリーっぽいアイコンを押す
- 更新マークを押す
この手順でスケルトンを任意のタイミングで更新することが出来ます。面倒ですが再起動よりは…。
最強のIDEと名高いPyCharmですが、Dockerでの開発に関してはVSCodeが数段上手かと思います。
向こうはコンテナ内に入り込んで実行をするため、環境の差異も生まれないですし、実行の度にコンテナを作ることもなく実行速度も負けています。
ただ、Pythonで開発するにあたっては、補完などその他の部分が圧倒的にPyCharmが強いので乗り換えることはしませんが、VSCode式のDocker開発も出来るようにならないかなあと思う今日この頃です。