lockファイルの依存はdevで指定してもmainに影響することがある
始めに
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に加えています。
途中からFastAPIはfastapi[all]で運用することになり、この時点でhttpxはmain dependenciesに加えられることになります。
しばらくして、fastapi[all]にhttpxが含まれることを知ったため、httpxをdev dependenciesから削除して、fastapi[all]の依存関係で処理しようとしたところ、大幅にバージョンが変わったために気づきました。
私がライブラリを更新しようとしたとき、固定していたhttpxとfastapi[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 dependenciesがmain dependenciesにも影響することになりました。
終わりに
指摘されれば当たり前ですがmain dependenciesだけをインストールする場合、新しく依存関係を計算するものだと勘違いしていました。でも、そうするとlockファイルの意味がなくなります。
main dependenciesとdev dependenxiesで同じライブラリを指定することは基本ないと思いますが、実際にその状況になって気づいたので共有のためにブログに残します。
Discussion