【Python】Poetryを使ったパッケージ管理
以前setup.pyを使って自作パッケージをライブラリ化する記事を書きました。
setup.pyを代替するツールにPoetryというものがあります。
Poetryを使うことでパッケージが依存するライブラリの依存関係を自動で解消してくれます。
本記事ではPoetryの基本的な利用方法についてまとめました。
目次
環境
以下のバージョンで確認しました。
poetry==1.3.1
Poetryのインストール
pipを使ってインストールします。
pip isntall poetry
新しくプロジェクトを作成する
Poetryをインストール後、以下のコマンドでプロジェクトを作成します。
poetry new my_project
コマンド実行後、以下のような構成のディレクトリが作成されます。
tree my_project
.
├── README.md
├── my_project
│ └── __init__.py
├── pyproject.toml
└── tests
└── __init__.py
pyproject.toml
このファイルによって依存ライブラリを始めとするパッケージの情報が管理されています。
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["名前 <メールアドレス>"]
readme = "README.md"
packages = [{include = "my_project"}]
[tool.poetry.dependencies]
python = "^3.10"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
tool.poetryのpackagesでパッケージ対象のディレクトリ名を指定します。デフォルトではプロジェクトのルートディレクトリが指定されます。ルートディレクトリとパッケージ対象のディレクトリが異なる場合はinclude = "<package_dir>"で<package_dir>を変更します。- PoetryではこのパッケージがサポートするPythonのバージョンを明示的に指定します。
tools.poetry.dependenciesのpython = "<version>"で指定されます。^3.10はメジャーバージョンが4未満で、マイナーバージョンが10以上であることを意味します (>=3.10.0 < 4.0.0)。
依存ライブラリを追加する
依存ライブラリを追加するにはpoetry addコマンドを実行します。
poetry add <dependency>
ユニットテスト用のライブラリなど開発者用の環境でのみ使う依存関係を追加する場合は以下のように-Dあるいは--devを追加します。
poetry add -D pytest
依存ライブラリでもバージョンを指定することができます。上記のように指定しない場合、最新版が利用されます。
CLIを作成する
まず、my_project/console.pyというファイルを作成し、以下のようなrun関数を作成します。
def run():
print("Hello")
pyproject.tomlに以下の内容を追記します。
[tool.poetry.scripts]
my_project_cli = 'my_project.console:run'
これによりmy_project_cliという実行ファイルを作成し、その実行内容はmy_project_cli/console.pyで定義したrun関数であるということを指定します。
仮想環境で実行する
poetry run my_project_cli
あるいは以下のように実行します。
poetry shell
my_project_cli
自作パッケージのインストール
自作パッケージをインストールする場合は以下のコマンドを実行します。
poetry install
このコマンドはルートディレクトリ配下にpoetry.lockがあるかないかで挙動が変わります。
poetry.lockがない場合
poetry installを初めて実行する場合などが該当します。
この場合、pyproject.tomlを見て依存関係を解決します。
インストール完了後、Poetryはpoetry.lockを作成し、そこにダウンロードした依存ライブラリのバージョンを記載します。
同じ環境でユーザに自作パッケージを利用してもらいたい場合、poetry.lockもバージョン管理ツールで扱う対象とします。
poetry.lockがある場合
これまでにpoetry installを実行したことがあったり、poetry.lockが含まれる他の人が開発したプロジェクトをインストールする場合などが該当します。
このとき、poetry.lockを見て依存ライブラリをダウンロードします。
そのため、利用者は開発者と同じ環境を構築できるようになります。
依存ライブラリのバージョン更新
poetry.lockによって、依存ライブラリのバージョンが固定されることを見てきました。
依存ライブラリのバージョンを更新したい場合は以下を実行します。
poetry update
これにより、最新バージョンの依存ライブラリをダウンロードしつつ、poetry.lockに書かれたバージョンも更新します。
ここでもまたpoetry.lockの差分をバージョン管理ツールで反映する必要があります。
おわり
Poetryの基本的な使い方についてまとめました。 利用者が開発者と同じ環境で使えるようにパッケージを管理するには便利なツールだと感じます。