PyCharmでDockerのPythonを利用するときのトラブル対応
PyCharmにおける問題
前回、「PyCharmでDockerコンテナのPythonを利用する方法」を紹介しました。このときライブラリのインストールに requirements.txt を利用しましたが、もちろん追加のとき requirements.txt に追記しますが、インストールしようにもPyCharmがうまく認識してくれません。苦肉の策で、Dockerコンテナに直接インストールし、実行は問題ない状態にしたとしても、相変わらずPyCharm上では認識してくれないままです。
どうもPyCharmがDockerコンテナをビルドした時の情報がキャッシュされており、再ビルドしても追加したライブラリを認識してくれないようです。
以下、私なりの解決方法を紹介したいと思います。正しい方法ではないように思いますので、自己責任でお願いします。
解決方法
解決方法の手順としては、以下の通りです。ステップごとに見てみましょう。
- requirements.txt を修正
- PyCharm上のインタプリタを削除
- プロジェクトのキャッシュを削除
- Docker のイメージを削除
- 再度PyCharmにインタプリタを追加・実行
1. requirements.txt を修正
今回は、追加ライブラリとして「scipy」を指定しました。もちろん実務ではバージョンも追記した方がいいと思いますが、今回は省略です。
numpy scipy
追記直後は scipy がまだインストールされていない状態なので、「Install requirement」をクリックしたり、docker-composeを再ビルドしてもIDE上では scipy が認識されません。そのため以下の手順を取ります。
2. PyCharm上のインタプリタを削除
一旦、PyCharm上からDockerコンテナのPythonを削除します。「File > Setting ...」より設定画面を開き、「Project Interpreter」の右にあるネジマークをクリックし、「Show All ...」を選択します。
利用していたPythonを選択し、右の「-」ボタンをクリックし、インタプリタを削除します。
3. プロジェクトのキャッシュを削除
PyCharmを利用すると、プロジェクトフォルダ直下に「.idea」フォルダが生成されます。これをゴッソリ削除します。
4. Docker のイメージを削除
CUIよりdockerのイメージを削除します。今回の場合、指定したイメージ「python:3.8」とPyCharmが起動したイメージを削除します。
DockerのIMAGE IDを確認します。
> docker images REPOSITORY TAG IMAGE ID python 3.8 bd5c014404d2 python <none> 1f88553e8143
IMAGE ID を指定して削除します。
> docker rmi -f bd5c014404d2 1f88553e8143
これで削除できました。
5. 再度PyCharmにインタプリタを追加・実行
4. まででプロジェクト初期の状態に戻りましたので、再度前回紹介した方法でDockerコンテナのPythonを追加します。すると、PyCharmでも追加したライブラリを認識しており、実行も正常に行えます。
実行時、もし「Continue with the new image? [yN]」と聞かれた場合は、「y」と入力し新しいイメージを作るといいでしょう。
まとめ
PyCharmでDockerコンテナのPythonを利用しており、追加ライブラリを requirements.txt に追記した時の手続きを紹介しました。これが正しい方法とは思っていないですが、とりあえず正常に実行できるようにはなりました。もっといい方法が見つかったら、また本記事を修正したいと思います。
TKS2では、Dockerを用いたプロジェクトやPythonによるプロジェクトも可能ですので、もしお困りのときはぜひお声がけください。