Poetryのすすめ

2024/8/28

Python

Poetry

はじめに

Pythonのパッケージを管理してくれる便利なツールであるPoetryを紹介します。

基本的な使い方も説明しているので最後まで見ていってください!

Poetryとは

Poetryは、Pythonプロジェクトの依存関係管理を効率的に⾏うためのツールです。

Poetryを導⼊すれば、requirements.txtによるパッケージ管理から解放されます。

Poetryの良いところ

  1. パッケージの⼀元管理が可能

    開発環境時のみ利⽤するライブラリ(blackflake8等)は、本番環境にはインストールしたくないですよね、、

    こういうとき、開発環境⽤、本番環境用のrequirements.txtをそれぞれ作らなければいけません。

    Poetryでは、pyproject.tomlというファイルで、開発環境用パッケージと本番環境用パッケージを⼀元管理します。

    また、formattter/linterの設定もこのファイルで管理可能です。

  2. 簡単に仮想環境を構築できる

    コマンド⼀つで、簡単に仮想環境を⽴ち上げることができ、 pyproject.tomlファイルに記載された依存 関係をもとに仮想環境を構築してくれます。

  3. ヒューマンエラーの軽減

    Poetryを利⽤する前は、requirements.txtに、以下コマンドでパッケージ情報を出⼒していました。

    pip freeze > requirements.txt

    新しいパッケージをインストールする度に、更新しないといけないし、忘れる⼈もでてくると思いま す。

    忘れた場合、バグの原因になりますし、チームメンバー間で開発環境が変わってしまったり もします。

    Poetryを使うと、requirements.txt⾃体不要で、新しいパッケージをインストールするたびに⼿動で テキストファイルを更新する必要がなくなります。

    また、依存関係が⾃動的に記録され、再現可能な環境が維持されます。

    パッケージ管理ファイルは⾃動更新されるのでヒューマンエラーも軽減できるってわけです。

    すばらしい、、

pyproject.tomlとpoetry.lock

上記の通り、pyproject.tomlでパッケージの⼀元管理ができ、poetry.lockが⾃動⽣成されます。

これにより、チームメンバ ーと同じ環境で作業できます。

Nodejsでいう、package.jsonpackage.lock.jsonと思ってもらえるとイメージつきやすいと思います。

導⼊

https://python-poetry.org/docs/#installing-with-the-official-installer

↑こちらに分かりやすくインストール⽅法が載っているので、リンクサイト(公式)を参考に導⼊してくださ い。

補足

バージョン指定したい場合

※最新バージョンである「1.8.2」を指定します。(2024/4現在)

  • Linux、macOS、Windows (WSL)
    curl -sSL https://install.python-poetry.org | python3 - --version 1.8.2
  • Windows (Powershell)
    (Invoke-WebRequest -Uri https://install.python-poetry.org - UseBasicParsing).Content | py - --version 1.8.2

基本的な使い⽅

poetryのバージョン更新

Poetry⾃体をバージョン更新します。

公式に以下注意書きがあったので、Windows環境でPoetryを利用している場合は、インストーラーを使用して再インストールするようにしましょう

Especially on Windows, self update may be problematic so that a re-install with the installer should be preferred.

poetry self update

Pythonプロジェクトのセットアップ

poetry new my_project

実⾏すると、以下ディレクトリが構築されます。

my_project
├── pyproject.toml
├── README.md
├── <project名>
│ └── __init__.py
└── tests
 └── __init__.py

Poetryの初期化

既にプロジェクトフォルダを作成済みだったり、必要最低限のファイルだけあれば良い⽅は以下コマンドを 実⾏してください

同時に仮想環境も作成されます。

poetry init -n

-nオプションは、実⾏時に求められる⼊⼒を省略できます。

実⾏完了すると、pyproject.tomlのみ作成されます。

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

仮想環境とlockファイルを⽣成し、pyproject.tomlに記載されたパッケージ をインストールします。

  • --without devオプションを付けることで、開発環境でのみ利⽤するパッケージを除いてインストールしてく れます。 開発環境⽤のパッケージの追加⽅法は後述します。
  • --no-rootオプションは、プロジェクトのルートパッケージをインストールしないオプションです。

    これがないとwarningなるので注意。

poetry install --no-root

# 本番環境を想定した場合
poetry install --no-root --without dev

仮想環境のアクティブ/⾮アクティブ化

poetry.tomlファイルが配置されているディレクトリで以下を実⾏します。

# アクティブ化
poetry shell

# ⾮アクティブ化
deactivate

スクリプト実⾏

仮想環境内のPythonを利⽤して、スクリプトを実⾏する場合に使います。

poetry run python your_script.py

poetry runを使わなくても、仮想環境をアクティブ化してからでも同様の結果を得られます。

# poetry runを使わない場合
poetry shell
python your_script.py

パッケージの追加

poetry.tomlファイルが配置されているディレクトリで以下を実⾏します。

仮想環境が、アクティブ/⾮アクティブに関係なく実⾏可能です。

実⾏完了すると、tomlファイルが⾃動更新されます。

pyproject.toml [tool.poetry.group.dev.dependencies] に、開発環境でのみ使うパッケージが追記されます。

poetry add <パッケージ名>
# 開発環境にのみインストールしたい場合
poetry add --group dev <パッケージ名>

※パッケージのバージョンを指定したい場合

# latest version
poetry add <パッケージ名>@latest

# Allow >=2.0.5, <3.0.0 versions
poetry add <パッケージ名>@^2.0.5

# Allow >=2.0.5, <2.1.0 versions
poetry add <パッケージ名>@~2.0.5

# Allow >=2.0.5 versions, without upper bound
poetry add "<パッケージ名>>=2.0.5"

# Allow only 2.0.5 version
poetry add <パッケージ名>==2.0.5

パッケージのアップデート/削除/一覧表示

poetry update

# 特定のパッケージだけを更新したい場合
poetry update <パッケージ名>

# パッケージの削除
poetry remove <パッケージ名>

# パッケージの⼀覧表⽰
poetry show

Poetryの設定確認/変更

poetryの設定確認

poetry config --list

poetryの設定変更

設定を⾃由に変更できます。

例えば仮想環境を作らないようにすることも可能です。

poetry config <オプション名> <設定値>

# 例)仮想環境を作成しない場合
poetry config virtualenvs.create false

他にもいろいろ設定変更できるので、poetry config --list コマンドで確認してみてください。

各設定について知りたい⽅はこちら(公式)を参照してください。

まとめ

これまでに、Poetryのメリットや使い⽅を紹介してきました。

最後にまとめると、

  • Poetryは、Pythonパッケージを簡単に管理してくれるツール
  • コマンド⼀つで簡単に仮想環境を構築してくれる
  • パッケージ管理しているpyproject.tomlが⾃動更新されるため、パッケージ管理が楽
  • チーム間で、開発環境を簡単に共有・再現することが可能

piprequirements.txtでパッケージ管理している⽅は、ぜひ使ってみてください

プロフィール


都内で約1年半Webエンジニアやってます!(2024/3現在)
業務ではフロントエンド, バックエンド, インフラ(AWS)まで担当してます。
利用言語:TS, JS, HTML, CSS, Python, C#
FW:Vue, React, FastAPI, Flask, Django, Streamlit
クラウド:AWS

タグ一覧

Ruff

alembic

Docker

pytest

Python

Poetry

i18n

SQLAlchemy

vscode

Nuxtr

Nodejs

Volta

MUI

Prettier

Eslint

Biome

Vite

swr

React

Netlify

daisyUI

Tailwind CSS

msw

microCMS

Nuxt

Vue

AWS