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