起因
現在、以下の2つのPythonパッケージをメンテナンスしています:
これまでずっとsetup.pyを使ってビルドしていましたが、11月にNJUloginを更新した際に次の警告メッセージに気づきました:
そのため、新しいpyproject.toml方式でビルドすることにしました。当時急いでPoetryを学び、NJUloginに適応させましたが、今日mijia-apiを更新しようとしたときにどう使うか忘れてしまい、改めてブログに記録しておこうと思います。今後はPoetryを積極的に使って依存関係を管理したいです。
Poetry
Poetryの公式サイトでは自身を「Pythonのパッケージングと依存関係管理を簡単に」と位置づけています。Node.jsに馴染みがある人ならnpmに似ていると感じられるかもしれません。コマンドラインから依存関係ファイルを編集・管理できます。
でも、poetryという名前はちょっと長すぎるので、以降はpopと呼ぶことにします。
インストール
ドキュメントを参照してください: https://python-poetry.org/docs/#installation
私はpipxを使ってインストールしました。
既存プロジェクトの初期化
これにより、以下のpyproject.tomlファイルが生成されます。
しかし私のパッケージには大文字が含まれているため、[tool.poetry]内のnameを変更するだけでなく、packages項目を手動で追加する必要があります。また、setup.pyにあった他の設定も追加します:
新しいPeotry仮想環境の作成と依存関係のインストール
デフォルトでは~/.cache/pypoetryに仮想環境が作成されます。pop configを使って変更可能です。詳しくはドキュメントをご覧ください。個人的にはプロジェクトディレクトリ内に置くのが好みです:
その後、requirements.txtから依存関係を一つずつインストールできます。以下のコマンドは依存関係をpyproject.tomlに書き込み、poetry.lockを生成します:
Peotryの大きな利点の一つは、依存関係をツリー形式で表示できることです:
これで、従来のsetup.pyを削除できます。
ビルドと公開
バージョンはpoetry-dynamic-versioningを使って動的に指定できます。毎回pyproject.tomlのバージョン番号を手動で変更する必要はありません。
これで、単一のコマンドでビルドが可能になります:
twineのように~/.pypircにPyPIのトークンを保存する必要はありません。Poetryは別途設定が必要です:
これで公開できます!