TL;DR
poetryの virtualenvs.createをfalse
に設定するように変更して、poetryで管理されているライブラリが増えるたびにDockerfileのイメージを作成するようにすれば良い。
想定読書
- DockerにPythonの実行環境を構築してIntelliJ IDEAで開発をしたい人
- poetryでライブラリを管理したい人
IntelliJでのDocker上のライブラリが読み込まれる条件
DockerイメージのグローバルなpipライブラリにインストールされているライブラリはIntelliJで読み込まれる。
そのためイメージを作成した後でattachしてpipでインストールされているライブラリを追加しても反映されることがない点に注意。
IntelliJでの環境構築方法
IntelliJでの環境構築方法は公式のドキュメントを参考にしてほしい。
Dockerfileの用意
以下のようなDockerfileを用意する。
重要なのは最後の2行目の poetry config virtualenvs.create false
である。
これを設定することでpoetryでinstallしたライブラリがグローバルのpipライブラリにインストールされるようになる。
もしも設定しないとpoetryはvirtualenv環境を実行ユーザのフォルダ(設定によっては実行したフォルダ)に作成するので、IntelliJはそこのライブラリを見に行かないためIntelliJ上で補完などが効かない状態になってしまう。
FROM python:3.12-slim
ENV PYTHONUNBUFFERED=1
RUN apt-get update && apt-get install -y \
build-essential \
bash-completion \
&& rm -rf /var/lib/apt/lists/* \
# ホスト環境のリポジトリルートをコンテナの/appにマウントする想定
RUN mkdir /app
WORKDIR /app
RUN pip install poetry \
COPY pyproject.toml ./
COPY poetry.lock ./
# これをやらないとdockerの開発環境のライブラリがIntelliJに反映されない
# デフォルトではvirtualenv環境が/root/*に作成されてしまいIntellijはグローバルのpipの環境を見に行くのでpoetryでinstallしたライブラリ群がないように見えてしまう
RUN poetry config virtualenvs.create false
RUN poetry install --no-root
このDockerfileの記述だとpyproject.tomlやpoetry.lockがある前提だが、当然だがプロジェクトの一番はじめにはこれらのファイルは存在しない。
そのため初回はDockerfileなどを利用せずにpythonのコンテナイメージからpoetryをインストールして、poetry initなどを行ってpyproject.tomlやpoetry.lockを作成する必要がある。
あとはpoetryでライブラリを追加するたびにDockerfileをビルドし直せばIntelliJでライブラリが読み込まれるようになる。