COBAKURA.COM

poetry 使い方メモ

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 してバージョンを更新する。

おすすめ記事

2023/7/5

Django OneToOneFieldが存在するかをチェックする方法