PyCharm + Docker + Python3.*で環境構築メモ
はじめに
PyCharm + Docker + Python3.*で環境構築した際のメモを残しておく。
バージョン
理由はわからんが、PyCharmの2020.2.*以上だと、下記のエラーが出る。
PyCharm Professional 2020.1.5 ➜ docker -v Docker version 19.03.13, build 4484c46d9d ➜ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H114
プロジェクトフォルダの作成
ここでは、デスクトップのtest_pj
を例にする。下記のような構成のディレクトリを作成する。
➜ mkdir ~/Desktop/test_pj ➜ mkdir ~/Desktop/test_pj/docker ➜ touch ~/Desktop/test_pj/docker/Dockerfile ➜ touch ~/Desktop/test_pj/docker/docker-compose.yml ➜ touch ~/Desktop/test_pj/requirements.txt ➜ touch ~/Desktop/test_pj/main.py ➜ tree ~/Desktop/test_pj /Users/aki/Desktop/test_pj ├── docker │ ├── Dockerfile │ └── docker-compose.yml ├── main.py └── requirements.txt
Dockerfile
状況に応じて書き変える。実際にはpython:3.*.*-slim
とか使うほうがいいかも。
FROM python:3.8 ADD . /opt WORKDIR /opt RUN pip install -r ./requirements.txt
docker-compose.yml
状況に応じて書き変える。
version: '3' services: python3: build: context: ../ dockerfile: ./docker/Dockerfile image: python:3.8 container_name: python tty: true working_dir: '/opt' environment: TZ: Asia/Tokyo
main.py
状況に応じて書き変える。ここでは、適当にタイムゾーンが変わっていること、pandasの依存でインストールされるnumpyが使えることを確認するサンプルスクリプト。
import datetime import numpy dt_now = datetime.datetime.now() print(dt_now) ary = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(ary)
requirements.txt
状況に応じて書き変える。
pandas==1.2.0
コンテナのインタプリタを作成
PyCharmのメニューから「Open」で「test_pj」プロジェクトを開く。次にインタプリタを指定するため、「PyCharm > Preferences」にすすみ、「Project: test_pj > Project Interpreter」の「ダイヤルマーク」をクリックし、「Add …」を選択。
コンテナ名や、ymlファイルを指定、ymlファイルのサービス名を指定してOKを押すと、ビルドが始める。この内容でも~5分くらいかかる。
ビルドが終わると、requirements.txtに記載したライブラリもインストールされている。これでコンテナのPython3をインタプリタとして設定できる。
あとはいつもどおり、「Edit Configurations」から実行するpyファイルを設定し、インタプリタにコンテナのPyhton3を指定する。
スクリプトを実行すると、下記のようにいつもとは異なる出力で結果が表示される。
コンテナに入りたいときは、左下の「8: services」から「exec > create > /bin/sh」でコンテナに入ることができる。
Dockerのコンテナ
Pycharm上で実行すると、下記のように勝手にもろもろ作成される。
➜ docker images REPOSITORY TAG IMAGE ID CREATED SIZE python 3.8 9fe8e6de5188 12 minutes ago 1.02GB pycharm_helpers PY-201.8743.20 6c1f5de742bf 15 minutes ago 35.9MB python <none> f5041c8ae6b1 6 days ago 884MB busybox latest 219ee5171f80 3 weeks ago 1.23MB ➜ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35711e02e024 python:3.8 "python -u /opt/proj…" 40 seconds ago Exited (0) 37 seconds ago python 2aa945d9bf01 6c1f5de742bf "/bin/sh" 15 minutes ago Created pycharm_helpers_PY-201.8743.20