7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IntelliJ + Docker + Pythonの環境構築

Last updated at Posted at 2019-10-12

はじめに

Macbookを買い換えたのでPythonの開発環境を作り直すことになるのですが、ローカルに直接Pythonをインストールすると、ついうっかりglobalにパッケージをインストールしてしまったり、venvを使っていても環境を作り直したいときに一手間が面倒だったり、ということが嫌だったのでDockerを使って構築することにしました。

IntelliJにPluginインストール

IntelliJにDocker Pluginが入っていない場合は Preferences > Pluginsからインストールします。

image.png

Pythonプロジェクトの作成

次にIntelliJを立ち上げてPythonプロジェクトを作成します。
Dockerの必要なイメージはこの後作るので、ここではとりあえず適当なProject SDKを選んでおきます。(ここではPython2.7(venv)になっています)
それ以外はデフォルトのままで良くて、プロジェクトを作成します。

image.png

IntelliJ上でDockerfileを作成してイメージをビルドする

今回はPythonQiitaというプロジェクト名にしました。最初にPython環境をDockerイメージにしておく必要があるので、プロジェクトフォルダの直下にDockerfileを作成します。(場所はどこでも良い)

image.png

Dockerfileにはベースとなるイメージファイル、初期設定コマンドなどを書いておきます。
今回はpython:3イメージを使います。パッケージにpandas numpyを入れておきます。

image.png

作成したDockerfileを右クリックして、メニューからCreate Dockerfileを選択します。

image.png

Configurationウィンドウが表示されるのでImage tagを入力します。このタグ名は後で使います。ここではpython_qiitaとしました。
Run built imageのチェックは外しておきます。これをオンにしておくと、イメージをビルドした後、コンテナとして起動してくれます。Container nameを入力すると、そのコンテナ名で起動するようになっています。

image.png

下記のimage.pngから作成したDockerfile設定を起動すればイメージがビルドされます。Deploy Logに'python_qiita Dockerfile: Dockerfile' has been deployed successfully.と出て完了したことが分かります。

image.png

イメージが作成されるとServicesビューにイメージ名が表示され、ビルドが成功したことが分かります。

image.png

ビルドしたイメージをProject SDKとして設定する

Dockerイメージがビルドできると、プロジェクトで利用するSDKとして利用できるようになります。コンテナはSDKにはならないので注意が必要です。

FIle > Project Structureを開き、Project項目にあるNewボタンを押し、ポップアップにあるPython SDKを選択します。
image.png

Python Interpreterを選択するウィンドウが表示されるので、左メニューにあるDockerを選びます。すると、Image nameに先ほどビルドしたDockerイメージのタグ名が選択できるようになっていることを確認してOKボタンを押します。

image.png

Project StructureのSDKs項目にRemote Python 3.7.4 Docker...が表示されており、packagesにDockerfileに書いたパッケージがインストールされていることが分かります。venvなどの環境では、ここでパッケージの追加・削除ができますが、DockerイメージのPythonだと追加・削除はできません。パッケージの構成が変わるたびにイメージをビルドしなおす必要があります。

image.png

Pythonの実行とデバッグ

ここまでくれば後は通常通りPythonファイルを作成して実行するだけですが、、、
設定を完了した直後だと、IntelliJがPythonの構成を適切に読み込めていないらしく、一度プロジェクトを閉じて開きなおす必要があります。さらに、画面下に下記のような更新中のインジケータが完了するまで待たないといけません。ここだけが難点です。仕組みはわかりませんが、改善されることに期待したいですね。

image.png

ここまで出来ればPythonのコード補完や実行、デバッグがIntelliJ上でできるようになっています。下記はpandasをインポートして実行した状態。
image.png

不便なこと

環境はDockerで構築できるのでポータブルになるし、気軽に作り直せることは実行環境面で非常に便利に感じます。一方で、いくつか不便に思うことがあるので書いておきます。

Dockerイメージをビルドしなおすと構成読み込みに時間がかかる

上述のSDKを設定した直後と同様に、イメージをビルドし直してPythonパッケージの構成を変えたとしても、すぐに反映されません。プロジェクトを再起動するなどして、IntelliJが再認識するのを待つ必要があります(数分)。
構成見直しが不要になってくると気になりませんが、プロジェクトの初期フェーズでは煩わしいです。

matplotlibなどのshow()的なことができない

当たり前ですが、Docker上で実行するのでshow()のようなウィンドウを立ち上げることができません。諦めてファイルに保存して確認するしかないです。

まとめ

紹介したような不便なところもありますが、環境も汚れないしポータブルであることは便利だと感じています。今までだと、パッケージの再構築が面倒だったり、requirements.txtのようなものに書きださなければならなかった環境が、Dockerfileにまとまるし、必要ならイメージをレポジトリで保存しておく事もできるのは良い感じだなと。
venvとどちらが楽か、と聞かれるとvenvだと思いますが、新しい環境で色々とやってみる方が今の自分の好みに合っているので、暫くはDockerで進めてみようと思います。

7
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?