MAGAZINE
ルーターマガジン
Pythonパッケージ管理ツールPoetryのご紹介
はじめに
Pythonのパッケージ管理というとpipとrequirements.txtを使うのが最もメジャーな方法かと思いますが、モダンなPythonにおけるパッケージ管理ではPoetryを使うことが増えてきているようです。今回はそんなPoetryの概要と導入方法を説明したいと思います。
注意点
本記事はPoetryが最も優れているという趣旨のものではありません。Pythonではどのツールも一長一短です。機械学習系のライブラリで相性が悪いケースがあるみたいなので、本格的に導入する前に一度試してみることをおすすめします。個人的には機械学習にはconda系が向いていると思っています。また、公式リポジトリによるとサポートされるPythonのバージョンは3.7以降のようです。
概要
まず、Poetryとは何なのでしょうか。 簡単に言えば、Node.jsのnpmやRubyのBundlerと似たようなことができるやつです。主な機能としては
- 仮想環境の自動作成
- ライブラリの追加(依存解決)
- プロジェクト管理ファイル(pyproject.toml)の生成と更新
- 依存関係の管理(poetry.lock)
- パッケージのビルド・公開
が挙げられます。これらの機能によって
- システムのPython環境を汚さない
- 開発環境と本番環境でライブラリのバージョンをビシッと揃えられる
- ライブラリが変更された際のデプロイ作業も簡単
という嬉しさがあります。
似たようなツールにPipenvというものがあり、PoetryにはPipenvに不満を感じた個人が立ち上げたプロジェクトという経緯があったりします。
Pipenv | Poetry | |
---|---|---|
開発 | PyPA | 個人 |
パッケージ記述 | Pipfile | pyproject.toml |
lockファイル | Pipfile.lock | poetry.lock |
パッケージング支援 | なし | あり |
大きな違いは、Poetryのライブラリ記述で使われるファイルがpyproject.toml
というPEP518で提案されたフォーマットに従っている点です。pyproject.toml
にはモジュール以外にメタデータやビルド設定などをまとめて書ける利点があります。
[tool.poetry]
name = "test-project"
version = "0.1.0"
description = "this is a test project."
authors = ["rooter"]
[tool.poetry.dependencies]
python = "^3.9"
Flask = "^2.0.3"
gunicorn = "^20.1.0"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
導入方法・基本的な使い方
Poetryの良さが分かったところで、基本的な使い方を説明していきます。
インストール
Mac / Linux / bashonwindowscurl -sSL https://install.python-poetry.org | python3 -
プロジェクトにPoetryを導入
対話形式でプロジェクトの設定をします。ここでpyproject.toml
が生成されます。
あとから編集できるため、全てデフォルトでも問題ありません。
新規プロジェクトをpoetryで管理する場合
poetry new [パッケージ名]
既存プロジェクトをpoetryで管理する場合
poetry init
仮想環境の作成
仮想環境構築の前に、pyenv version
でPythonバージョンが正しいか確認してください。問題がある場合は以下のドキュメントを参照してください。
https://cocoatomo.github.io/poetry-ja/managing-environments/
パッケージを追加
poetry add [パッケージ名]
パッケージのインストール、pyproject.toml
と poetry.lock
への書き込みを行います。仮想環境がない場合は作成されます。
poetry remove [パッケージ名]
pyproject.toml
またはpoetry.lock
に記述されたパッケージを一括インストール
poetry install
仮想環境内で実行
poetry run [コマンド]
例: poetry run python app.py
他に、poetry shell
でシェル上で仮想環境をアクティベートすることもできます。
以上が基本的なPoetryの使い方になります。毎度poetry run python hoge.py
みたいにタイピングするのは面倒なので、poetry run
に対してエイリアスを設定しておくのがおすすめです。まずは趣味のプロジェクトで使い始めてみてはいかがでしょうか。
CONTACT
お問い合わせ・ご依頼はこちらから