MAGAZINE

ルーターマガジン

Python

Pythonパッケージ管理ツールPoetryのご紹介

2022.03.30
Pocket

はじめに

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にはモジュール以外にメタデータやビルド設定などをまとめて書ける利点があります。

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 / bashonwindows
curl -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.tomlpoetry.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に対してエイリアスを設定しておくのがおすすめです。まずは趣味のプロジェクトで使い始めてみてはいかがでしょうか。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから