🐍

lockファイルの依存はdevで指定してもmainに影響することがある

2025/02/27に公開

始めに

Pythonのpoetry.lockで確認した事象ですが、他のライブラリのlockファイルでも当てはまると思います。仕様上当たり前のことに気づいたのでメモします。

環境

  • Poetry
    • 2.0.0
  • fastapi[standard]
    • 0.115.8
  • httpx
    • 0.28.1

まとめ

dev dependenciesでバージョンを指定した場合、main dependenciesにも影響することがある。

やっていたこと

FastAPIで非同期のテストをするために、httpxを使用していました。この時にhttpxをバージョン固定した状態でdev dependenciessに加えています。

途中からFastAPIfastapi[all]で運用することになり、この時点でhttpxmain dependenciesに加えられることになります。

しばらくして、fastapi[all]httpxが含まれることを知ったため、httpxdev dependenciesから削除して、fastapi[all]の依存関係で処理しようとしたところ、大幅にバージョンが変わったために気づきました。

私がライブラリを更新しようとしたとき、固定していたhttpxfastapi[all]の依存バージョンは次の指定していました。

  • fastapi[all]
    • >=0.23.0
  • 指定していたdev.dependencies
    • =0.23.3

この状態で、main dependenciesだけをインストールすると、インストールされるバージョンは0.23.3です。

poetry install --no-root --only main

私の予想では、現時点(2025/02/23)でのhttpxの最新バージョンが0.28.1だったため、main dependenciesだけをインストールしたら0.28.1がインストールされるものと思っておりました。

しかし、dev dependenciesに指定しているバージョンがfastapi[all]のサポートバージョンの内だったこともあり、lockファイル作成時のdev dependenciesmain dependenciesにも影響することになりました。

終わりに

指摘されれば当たり前ですがmain dependenciesだけをインストールする場合、新しく依存関係を計算するものだと勘違いしていました。でも、そうするとlockファイルの意味がなくなります。

main dependenciesdev dependenxiesで同じライブラリを指定することは基本ないと思いますが、実際にその状況になって気づいたので共有のためにブログに残します。

Discussion