はじめに
先程はPoetryとIntellijの開発環境を整えましたが、本番環境を考えるとやはりDocker+Intellijで環境を構築したいところです。半日格闘してPoetryを完全に理解したので、Poetry + Docker + Intellijの環境ができました。
関連記事
前提条件
- Poetry 1.0.5
- Poetryでライブラリ管理を既にしている
- Dockerを既に使っている
- Intellijを使っている
IntellijからDocker経由でPoetryと仲良くなる方法
要するにこれだけ。これで仮想環境を作ることなく、build-inのpythonにパッケージインストールをしてくれます。
$ poetry config virtualenvs.create false
Dockerfile
せっかくなのでDockerfileからやってしまいましょう。devとprodを分ける意味で、どうせならmulti stage buildもやってしまいましょう。 Dockerfileはこちら。
FROM python:3.7-slim as production
COPY poetry.lock pyproject.toml ./
RUN pip install poetry \
&& poetry config virtualenvs.create false \
&& poetry install --no-dev
FROM production AS development
RUN pip install poetry \
&& poetry install
Buildするときは、 docker build --target production ...
で poetry install --no-dev
が実行されるので、pytest等を含まないミニマムなイメージが作れます。 docker build --target development ...
poetry install
が改めて実行されるので、pytest等を含むデバッグやCI用のイメージが作れます。
pip install poetry
をdevelopment stageでも実行しているのは、そうしないとpoetry関係の依存ファイルが欠落してpoetryコマンドの実行に失敗するからです。Dockerを雰囲気で使っているので欠落する理由は分かっていない。
先程も書きましたが、 poetry config virtualenvs.create false
を実行することでpoetryは仮想環境を作らず、build-inのpython interpreterにパッケージをインストールしてくれます。今回使ったベースイメージには既にpython interpreterが入っているので、これだけでOKです。
Intellij側の設定
普通にDockerからInterpreterを設定すればOK。
おわりに
やっぱソフトウェアエンジニアなら開発環境は本番環境をエミュレートできるDockerですよね!さっきの記事はゴミだった。