【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の基本的な使い方についてまとめました。 利用者が開発者と同じ環境で使えるようにパッケージを管理するには便利なツールだと感じます。