メモ: Docker上のDjango環境でshell_plus

このエントリーをはてなブックマークに追加

DockerのDjangoコンテナに対してpython manage.py shell_plusするときのメモ、正確にはdocker-composeで行っている。メモなので雑な記録。

app/settings.pyに下記追加してipythonを有効化、重要なのは後のIPYTHON_ARGUMENTS、ここにprofileの配置ディレクトリとして永続化される場所を渡しておくことで履歴や設定が保存される。

SHELL_PLUS = "ipython"
IPYTHON_ARGUMENTS = [
  '--profile-dir', '/app/ipython_profile'
]

Dockerfileはこんな感じ、中国なのでpip用にProxy設定追加してる

FROM python:3.6
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV http_proxy http://192.168.1.X:8080
ENV https_proxy http://192.168.1.X:8080
RUN mkdir /app
WORKDIR /app
ADD requirements.txt /app/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /app/
Django==2.0.4
uwsgi==2.0.17
PyMySQL==0.8.0
django-extensions==2.2.8
ipython==5.9.0

あと、~/.docker/config.jsonに下記を書いておくとCtrl-pがDockerに横取りされて履歴アクションがおかしくなるの(Ctrl-p2回押し問題)を防げる。これはdjangoのshellでもbashでも同じ

{
        "detachKeys": "ctrl-\\"
}

で、下記で起動する。オプションのCOLUMNSやLINESオプションはコンソール上で表示がおかしくなったりする問題の対応。

docker-compose run -e COLUMNS="`tput cols`" -e LINES="`tput lines`" python-container python manage.py shell_plus --print-sql

参考サイト: