IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python Poetry1.2の新機能

どうも、nippa です。

Poetry1.2 で追加された新機能をまとめておきます。

グループ機能と環境同期はお世話になりそうな機能です。

すべての機能は試せていないので、公式をご確認ください。

Poetry 1.2 公式リリースノート

環境

グループ機能

グループのフォーマット

これまでは、main と dev の 2 つでしたが、1.2 からは gruop 機能が追加されました。

これまでの dev はpyproject.tomlで以下のように記載されていましたが、

[tool.poetry.dev-dependencies]
flake8 = "^5.0.4"

1.2 からはグループの1つとして、記載されるようになりますので、修正が必要になります。

[tool.poetry.group.dev.dependencies]
flake8 = "^5.0.4"

グループ機能が追加されたことにより、同じソースから複数の docker image を作成する場合や、API を分けて実装する際など活用の幅が広がります。

グループを指定してパッケージの追加

以下のように--group [グループ名]を指定してパッケージを追加することができます。

poetry add [パッケージ名] --group [グループ名]

これまでのpoetry add -Dは 1.2 から使えなくなります。

グループ依存をしてたパッケージのインストール

グループ依存をオプションで指定してパッケージのインストールができるようになりました。

# mainと指定したグループをインストール
poetry install --with [グループ名]

# 指定したグループを除外してインストール
poetry install --without [グループ名]

# 指定したグループのみをインストール
poetry install --only [グループ名]

グループのパッケージの削除

以下のコマンドは、指定したグループから指定のパッケージを削除します。

poetry remove [パッケージ名] --group [グループ名]

poetry から requirements.txt のエクスポート

これまでは requirements.txt を poetry から作成するには plugin をインストールする必要がありましたが、1.2 からデフォルトでプラグインがインストールされるようになります。

export の使い方としては以下のようになります。

poetry -o [ファイル名] -f requirements.txt --without-hashes

poetry-plugin-export のダウンロードページ

git レポジトリに対して、サブディレクトリを指定してインストール

git レポジトリを poetry を使ってインストールする際に、サブディレクトリを指定することが可能になります。

#subdirectory=[サブディレクトリ]を以下のように指定することで、指定のディレクトリにインストールすることが可能です。

$ poetry add git+https://github.com/myorg/mypackage_with_subdirs.git#subdirectory=subdir

シングルページの登録

シングルページをソースとして登録することが可能になりました。

poetry source add <SOURCE_NAME> <PAGE_URL>

# e.g.
poetry source add jax https://storage.googleapis.com/jax-releases/jax_releases.html

個人的にはこの機能の利用方法は今のところ思いついていません。。。

poetry.lock ファイルで Poetry の環境を動悸する

複数プロジェクトで poetry を利用しているとパッケージを追加し忘れていても環境に残っている場合がありました。

そのようなときにpoetry.lockの内容を環境に同期させることができるようになりました。

--syncオプションを付けてインストールすると、同期されます。

poetry install --sync

この機能は地味ですが、結構使う頻度が多くなると思います。

感想

ざっくりとではありますが、Poetry1.2 の新機能についてまとめてみました。

いろいろ使いやすくなってきたので、python のパッケージ管理は poetry でと思っています。

ではでは、また次回。