Apitore blog

Apitoreを運営していた元起業家のブログ

Poetry + Docker + Intellijの開発環境を整える

はじめに

先程は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ですよね!さっきの記事はゴミだった。