Dockerfile
FROM python:3.10.5-slim-buster
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV POETRY_VERSION=1.8.2
ENV POETRY_INSTALL_OPTIONS="--with tox"
RUN apt-get update && \
apt-get install -y libpq-dev gcc && \
rm -rf /var/lib/apt/lists/*
RUN mkdir /code
WORKDIR /code
COPY pyproject.toml poetry.lock* /code/
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir poetry==$POETRY_VERSION && \
# 仮想環境は作らない。Dockerコンテナ自体が隔離された環境なので。
poetry config virtualenvs.create false && \
poetry install $POETRY_INSTALL_OPTIONS
COPY . /code/
ファイルについて
pyproject.toml
リンター周りの設定、パッケージツール群の設定ファイル。
依存パッケージを定義。ざっくり言うとrequirements.txt的な。
ツールごとに特化したサブテーブル。([tool.isort])など。
poetry.lock
パッケージマネージャー。pyproject.tomlから反映される。実際にインストールされるバージョン。pypiからダウンロードできる。
管理ファイルの生成、アップデート、プロジェクトごとの仮想環境。
コマンド
poetry installライブラリのインストール。 poetry.lockを優先で見にいく。
poetry install --with tox
pyproject.toml の dependency group「tox」定義を参照しつつ、
実際に入れるバージョンは poetry.lock を参照する
パッケージのバージョンを更新したい時
- 現状の把握 (更新できるパッケージがあるか)
poetry show --outdated
poetry show --outdated --with tox (toxグループも入れる場合)
poetry show --outdated --only tox (toxグループに限定)
- pyproject.tomlを更新(必要なバージョンに手動で更新する)
- 特定のパッケージを更新
poetry update requests
→ pyproject.tomlの条件の中で最新のバージョンに更新される。(poetry.lockが更新される)pyproject.toml に requests = "^2.32.5" とある場合、2系の中で最新バージョンに更新される。
- 更新後バージョンで動作確認やテスト実行して正常に動くことを確認する。
不要になったライブラリを削除する時
poetry remove パッケージ名
定期チェック
定期的に poetry show --outdated してバージョンを更新する。