はじめに
表題の通りです。
pythonの環境をDockerで作るのにいろいろ準備が必要だったので、それを備忘録的にまとめました。
設定
docker周り
まずお決まりの2つのファイル
version: '3' services: app: build: context: . args: - UID=${UID} - GID=${GID} - USERNAME=${USERNAME} container_name: 'vegetation_analysis_app' working_dir: /app tty: true volumes: - .:/app user: "${UID}:${GID}" command: /bin/bash -c "/app/startup.sh && tail -f /dev/null"
${ }
とすることで、envファイルの変数を読み込みます。args
に入れることで、Dockerfileで指定した変数を使えます。command
はcontainerの起動方法に関わらず、実行したら終了するので、最後に無言実行する処理を起きます。/dev/null
は特別なデバイスファイルで、データを読むと何も出力されない一方、データを書き込むとそのデータは破棄されます。そのため、tail -f /dev/null
を実行すると、実際には何も出力されず、コマンドは何も新しいデータが追加されることを待っています(実際には/dev/null
に新しいデータが追加されることはありません)
user
はstartup.sh
を実行するために指定しています。実際にはlocalのuserと同じにしているため、localで作成したstartup.shを実行することができます。
FROM python:3 # USER setting ARG USERNAME ARG UID ARG GID RUN useradd -m -s /bin/bash -u $UID -g $GID $USERNAME USER root RUN apt-get update RUN apt-get -y install locales && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ JST-9 ENV TERM xterm RUN pip install --upgrade pip RUN pip install --upgrade setuptools RUN python -m pip install jupyterlab
- 公式のimageを利用
ARG xx
とすることでcompose.yaml
で定義した変数を定義できます- USER設定、i18n設定、pipの整備を行いました
ipynbファイルをgitで扱うために
ipynbファイルをgitで管理しようとすると、metaデータのせいで、diffが莫大になる問題は昔からあった。
Using IPython / Jupyter Notebooks Under Version Control
解決策として、gitのコミットするたびにmetaデータを消すスクリプトを設置することらしい。
やり方はここにあります。
IPython Notebook で書いたコードをGitで管理するには?
具体的には、以下の2つのファイルを作成し、コマンドを打つだけ。
*.ipynb filter=dropoutput_ipynb
#! /usr/bin/python import sys from IPython.nbformat.current import read, write json_in = read(sys.stdin, 'json') for sheet in json_in.worksheets: for cell in sheet.cells: if "outputs" in cell: cell.outputs = [] if "prompt_number" in cell: cell.prompt_number = '' write(json_in, sys.stdout, 'json')
作ったらこのコマンド
$ chmod +x ./config/ipynb_on_git/ipynb_output_filter.py $ git config --global core.attributesfile ./config/ipynb_on_git/.gitattributes $ git config --global filter.dropoutput_ipynb.clean ./config/ipynb_on_git/ipynb_output_filter.py $ git config --global filter.dropoutput_ipynb.smudge cat
VSCodeの拡張機能
ipynbを実行するため(?)にこの拡張機能をいれとこう。