Poetry で python の環境を管理していて、学習用サーバーと推論用のサーバーで異なるパッケージを入れたくなったのでメモ。
背景
基本的には全部 dependencies に突っ込んでしまえば良いと思っていたんだけど、この世の中には install だけでメモリを数GB必要とする強力かつ凶悪なパッケージたちがいるらしいので、貧弱なインフラではインストールすらできねぇ...ということが問題になった。
(一時的に)インフラ強くしろよ、というのは妥当に聞こえるが、この先数ヶ月、ないし数年に渡ってインストールが終わったあとに確実にインスタンスサイズを変える自信があるかい?僕にはない。だから工夫した。
本題
poetry には optional
と extras
という概念がある。
それぞれ add
、install
サブコマンドのオプションである。
結論から書くと、以下の手順でうまく行った:
1. 依存パッケージ追加時
$ poetry add --optional SOME_STRONG_PACKAGE
2. 任意のエディタで pyproject.toml に extrasパッケージを追加
$ vi pyproject.toml
# ↓追加
[tool.poetry.extras]
train = ["torch", "torchtext"]
↑ グループ名 ↑ インストールするパッケージのリスト(dependencies の方で optionalになっていることを確認)
3. インストール(extrasが不要な場合)
$ poetry install
3'. インストール(extrasが必要な場合)
$ poetry install -E train
詰まったところ
すでに poetryで管理されているプロジェクトで上記の方法を試したら、以下のエラーが出た:
[ValueError]
Extra [train] is not specified.
その後、 poetry.lock
を消して再度上の poetry install -E train
を試したら、うまく行った。
明らかにエラーメッセージが親切でない PRチャンス。