PyCharmでDockerのPythonを利用する方法

PyCharmとは

PyCharmは、JetBrains社が提供しているPython用IDEであり、Python開発者に広く利用されています。
https://www.jetbrains.com/ja-jp/pycharm/

個人的にJetBrains社の製品が素晴らしいと思うのは、このPyCharmに限らず全ての製品において、初期設定を行わなくともスムーズに開発を進めれることです。エンジニアの多くは、Visual Studio Code, Sublime Text 3, Atomのようなエディタに好きなプラグインを追加し、好みのカスタマイズを行っていますが、正直なところ私は面倒な作業だと感じており、自分の好みをJetBrains社の製品に寄せています。

DockerコンテナのPythonを利用

Pythonを始めるに当たり、最も簡単な方法は Python を OS に直接インストールすることです。Pythonを勉強だけであれば特に問題になりませんが、業務でPythonを利用していると、指定されたバージョンのものをインストールしなければいけないため、複数のバージョンを保持している状態になります。つまり、ローカルの開発環境が汚されていくことになります。
そこでDockerのPythonを利用すれば、不要になったらコンテナを削除するだけですので、ローカルの開発環境が汚されることはありません。せっかくなのでPyCharmでDockerコンテナのPythonを利用してみましょう。以下、Dockerは既にインストールされているものとして説明を進めます。また今回の環境は次の通りです。

  • Windows 10
  • PyCharm Professional 2019.3.1
  • Docker Desktop community 2.1.0.5

プロジェクトの準備

PyCharmでプロジェクトを作成するとき、通常であればPyCharm上で新規作成しますが、Pythonはdocker-composeで指定したいので、先にプロジェクト用のフォルダ・ファイルを用意し、PyCharmで読み込ませます。任意の位置に下記のファイル構成を整えてください。

MyProject
├── docker
│   ├── Dockerfile
│   └── docker-compose.yml
├── main.py
└── requirements.txt

Dockerfile

「 Dockerfile 」は、シンプルにDockerイメージ「python:3.8」を利用すること、 requirements.txt をインストールすることが記されています。

FROM python:3.8
ADD . /var/www/html
WORKDIR /var/www/html
RUN pip install -r ./requirements.txt

docker-compose.yml

「 docker-compose.yml 」では、ビルドに「 Dockerfile 」を用いることなどが記されています。

version: '3'
services:
  app:
    build:
      context: ../
      dockerfile: ./docker/Dockerfile
    image: python:3.8
    volumes:
      - '../:/var/www/html'
    container_name: python
    tty: true
    working_dir: '/var/www/html'

main.py

メインとなる「 main.py 」では、numpyを用い配列を作成しているだけの簡単な処理を行っています。

import numpy

ary = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(ary)

requirements.txt

「 requirements.txt 」には、「 main.py 」で使用する numpy だけが記されています。実務ではバージョンも指定した方がいいでしょう。

numpy

PyCharmのメニューより「Open」より上記「MyProject」フォルダを開きます。次にインタプリタを指定するため、「File > Setting ...」より設定画面を開き、「Project Interpreter」の右にあるネジマークをクリックし、「Add ...」を選択します。

「Docker Compose」より「Comfiguration file(s):」において先に作成しておいた「docker-compose.yml」を指定します。読み込みが終わった後に、「Service:」より「app」を選択します。そして「OK」をクリックして画面を閉じます。

読み込みが完了すると「requirements.txt」で指定した「numpy」がインストールされていることがわかります。そしてまた「OK」をクリックして画面を閉じます。

「docker-compose.yml」で指定したイメージ「python:3.8」は、ローカルのイメージになくてもPyCharm内で自動ダウンロードされるため、自身によるdocker上でのダウンロードは不要です。以上でプロジェクトの準備は完了です。

main.py 実行

main.py を実行するために設定を行います。画面上部にある「Add Configuration ...」をクリックし実行設定画面を開きます。

実行設定画面の左上にある「+」ボタンをクリックし、「Python」を選択します。

「Script path:」に先に作成しておいた「main.py」を指定し、「OK」ボタンをクリックします。これで実行の準備が整いました。

それでは画面上部にある実行ボタンをクリックしましょう。正常に実行されると実行画面が開き、配列のログが出力されます。

注意

今回はライブラリの追加を「 requirements.txt 」で指定しましたが、プロジェクトが大きくなると追加ライブラリが必要になるでしょう。PyCharmでは「 docker-compose.yml 」をビルドした時の情報が残っており、「 requirements.txt 」に追加しても正しく表示されません。docker上でインストールすると、実行だけは正常に行われる場合もあり、何が正しい状態なのかわからなくなってしまいます。正しい対処方法は不明ですが、私なりの解決方法を次回紹介したいと思います。

まとめ

PyCharmでDockerコンテナのPythonを利用する方法を紹介しました。DockerのPythonを利用すると、ローカルの開発環境を汚すことなく、且つ不要になったらコンテナを削除するだけで簡単です。これを機会にぜひPyCharmでDockerのPythonを利用してください。

TKS2では、Dockerを用いたプロジェクトやPythonによるプロジェクトも可能ですので、もしお困りのときはぜひお声がけください。