PyCharmでDockerのPythonを利用するときのトラブル対応

PyCharmにおける問題

前回、「PyCharmでDockerコンテナのPythonを利用する方法」を紹介しました。このときライブラリのインストールに requirements.txt を利用しましたが、もちろん追加のとき requirements.txt に追記しますが、インストールしようにもPyCharmがうまく認識してくれません。苦肉の策で、Dockerコンテナに直接インストールし、実行は問題ない状態にしたとしても、相変わらずPyCharm上では認識してくれないままです。
どうもPyCharmがDockerコンテナをビルドした時の情報がキャッシュされており、再ビルドしても追加したライブラリを認識してくれないようです。
以下、私なりの解決方法を紹介したいと思います。正しい方法ではないように思いますので、自己責任でお願いします。

解決方法

解決方法の手順としては、以下の通りです。ステップごとに見てみましょう。

  1. requirements.txt を修正
  2. PyCharm上のインタプリタを削除
  3. プロジェクトのキャッシュを削除
  4. Docker のイメージを削除
  5. 再度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によるプロジェクトも可能ですので、もしお困りのときはぜひお声がけください。