Python のパッケージ管理ツール Poetry の使い方

Python

概要

これまで、pyenv を使用していたので、pip を使用していたが、Python のバージョン管理を asdf を行うようにしたので、パッケージの管理も 依存関係の管理もできる potry に切り替えて行きたいと思います。

Poetry - Python dependency management and packaging made easy
Python dependency management and packaging made easy
GitHub - python-poetry/poetry: Python packaging and dependency management made easy
Python packaging and dependency management made easy - python-poetry/poetry

インストール

Poetry も asdf でインストールができたので、asdf でインストールしていきます。

asdf plugin add poetry
asdf install poetry latest
asdf global poetry 1.1.6

asdfについては↓を参照ください

poetry --version
# Poetry version 1.1.6

Poetry はデフォルトの設定だと virtual enviroment をプロジェクトのディレクトリ直下ではなく、キャッシュディレクトリ(Mac だと ~/Library/Caches/pypoetry)に作成してしまうので、下記のコマンドを実行し、virtual enviroment がプロジェクトの .venv/ 配下に作成されるようにします。
また、これをすることで、VSCodeでも実行環境の指定が可能になります。

poetry config virtualenvs.in-project true --local

パッケージ管理機能の使い方

プロジェクトの作成

適当なディレクトリで poetry new することで新規にディレクトリが作成され、必要なファイルが作成されます。既存ディレクトリの場合は、 poetry init でディレクトリ内にファイルが作成されます。

poetry new poetry-test
tree poetry-test
# poetry-test
# ├── README.rst
# ├── poetry_test
# │   └── __init__.py
# ├── pyproject.toml
# └── tests
#    ├── __init__.py
#    └── test_poetry_test.py

portry の設定ファイルである pyproject.toml の中身は↓のようになっています

[tool.poetry]
name = "poetry-test"
version = "0.1.0"
description = ""
authors = ["Yasuyuki Kikuchi <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

直接編集することも可能ですが、add や remove 等のコマンドが提供されていますのでそれを使用するのがおすすめです。
直接編集した場合には、poetry check コマンドで pyproject.toml の内容をチェック しておくと安心です。

パッケージの追加

poetry add で パッケージを追加します。
add コマンドは、pyproject.toml への設定の追加とインストールを行います。
今回は、 Python コードフォーマッタである black を追加します。

poetry add --dev black

pyproject.toml の中身を確認すると追加されています。

[tool.poetry.dev-dependencies]
pytest = "^5.2"
black = "^21.6b0"

依存関係のアップデート

依存関係をアップデートした場合には update コマンドを使用します。update コマンドは依存関係をチェックし、poetry.lock にその結果を記録します。

poetry update

poetry update <name>
# poetry update black pytest

引数でパッケージを指定することで、指定のパッケージの依存関係のみをアップデートすることも可能です。

パッケージの削除

remove コマンドを使用することで、pyproject.toml 及び環境から削除することが可能です。

poetry remove --dev black

パッケージのインストール

install コマンドを使用することで、pyproject.toml が読み込まれ、依存関係のファイルも含め、定義されているパッケージが全てインストールされます。
カレントディレクトリに poetry.lock にある場合は、そこに記載されているバージョンのパッケージがインストールされますが、存在しない場合には、依存関係を解消した状態で作成されます。

poetry intall

–no-dev オプションを指定することで、dev-dependencies に定義されているパッケージをスキップすることが可能です。

virtual enviroment でのプログラムの実行

poetry run を 使用することで、virtual enviroment でプログラムの実行が可能です。pytest や black のようなCLIツールの場合には、poetry run pytest の形式で実行が可能です。

poetry run python ./test.py

poetry run black ./test.py

virtual enviroment の activate

poetry shell で activate、exit で deactivate が可能です。

poetry shell
# activate

exit
# deactivate

コメント

タイトルとURLをコピーしました