はじめに

Poetry を利用した Python プロジェクトにおいて、
既存環境のパッケージ更新で少しハマった点があったため、備忘としてまとめます。
プロジェクト構築者とメンテナンス担当者(後任)が異なるケースで発生しやすい内容です。

環境

  • WSL 2.6(Ubuntu)
  • poetry 2.1

前提

  • すでに Poetry でプロジェクトが作成されている
  • プロジェクトの構築者と、現在のメンテナンス担当者が異なる

目的

  • プロジェクトで使用しているすべてのパッケージを最新化すること
  • 具体的には、poetry show --outdatedで表示されるパッケージをなくすこと

パッケージ更新

poetryの日本語サイトから、以下の使い分けと理解してます。

制約内のバージョンアップ

pyproject.tomlに記載されているバージョン制約内でバージョンアップする

poetry update

poetry.lockが更新される

制約外のバージョンアップ

pyproject.tomlに記載されているバージョン制約自体を更新する

poetry add

最新バージョンにする場合は@latestを付ける

poetry add パッケージ名@latest

pyproject.tomlpoetry.lockが更新される

エラー発生手順

以下の手順で、パッケージを更新しました。

  1. 現状のパッケージバージョンを確認

     poetry show --outdated
    
  2. 制約内のバージョンアップを実行

     poetry update
    
  3. 更新結果を確認(期待通り、パッケージ数が少なくなる)

     poetry show --outdated
    
  4. 制約外のバージョンアップを実行

     poetry add パッケージ名@latest
    
  5. 以下のエラーが発生

     Incompatible constraints in requirements of プロジェクト名
    

原因と対処

依存関係が以下のようにグループに分かれておりました。

  • プロダクション用
  • 開発用(dev)

poetry updateはグループを意識せずに更新してくれますが、
poetry addは、どのグループに属するパッケージかを明示的に指定する必要がありました。

そのため、正しくは次のように指定します。

poetry add パッケージ名@latest --group グループ名

まとめ

Poetry プロジェクトを後任としてメンテナンスする場合は、以下のことを理解しておくとトラブルに強くなります。

  • パッケージがどのグループ(dev など)に属しているか
  • poetry updatepoetry addの挙動の違い

パッケージ更新前に、pyproject.tomltool.poetry.groupを事前に確認することを推奨します。

更新方法の整理

  • 制約内更新 → poetry update
  • 制約外更新 → poetry add パッケージ名@latest --group グループ名