先輩が使っているPoetryについて調べてみた
自分でもPoetryを触ったことがあったのですが、いまいち理解しきれない部分もあったので、Poetryの特徴やよく使うコマンド、Pipとの比較について調べて理解を深めようと思います。
Poetryの概要
Poetryは、Pythonの依存関係管理とパッケージングを簡単に行うためのツールです。Poetryを使うと、プロジェクトの依存関係を簡単に管理し、効率的に行うことができます。
依存関係の管理
Poetryはpyproject.tomlファイルを使用して依存関係を定義します。これにより、プロジェクトの依存関係を簡単に追加、削除、更新できます。また、poetry.lockファイルを生成し、依存関係のバージョンを固定することで再現性のあるビルドを実現します。
仮想環境の自動管理
Poetryはプロジェクトごとに仮想環境を自動的に作成・管理します。これにより、依存関係が他のプロジェクトと干渉することを防ぎ、開発環境を整えるのが簡単になります。
パッケージのビルドと公開
Poetryを使用すると、プロジェクトを簡単にパッケージ化し、PyPIなどのリポジトリに公開できます。これにより、自分のライブラリやアプリケーションを他の開発者と共有しやすくなります。ただし、この記事ではあまり触れません。
直感的なコマンド
Poetryは使いやすいコマンドを提供しており、依存関係の追加、削除、更新、仮想環境の管理、パッケージのビルドと公開などの操作を簡単に行えます。
インストール手順
Mac
Homebrewがない場合
下記のコマンドを実行
curl -sSL https://install.python-poetry.org | python3 -
Homebrewがある場合
下記のコマンドを実行
brew install poetry
Windows
下記のコマンドを実行
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
インストールの確認
下記のコマンドが実行できることを確認する
poetry --version
下記の内容が表示されたら正常にインストールができています。
Poetry (version 1.7.1)
よく使うコマンド
<基本コマンド>
新しいPythonプロジェクトの初期化
新しいPythonプロジェクトを簡単に初期化することができます。このコマンドを使用すると、基本的なディレクトリ構造と必要なファイルが自動的に作成されます。
poetry new
プロジェクトの初期化
プロジェクトの初期化を行います。このコマンドを実行すると、プロジェクトディレクトリ内に基本的な構成ファイルが生成されます。
poetry init
依存関係の追加
指定したパッケージをプロジェクトに追加します。
poetry add <パッケージ名>
開発依存関係の追加
開発環境でのみ必要な依存関係を追加します。
poetry add --group dev <パッケージ名>
依存関係の削除
指定したパッケージをプロジェクトから削除します。
poetry remove <パッケージ名>
プロジェクトのアップデート
すべての依存関係を最新バージョンに更新します。
poetry update
<仮想環境管理>
通常VSCodeやPyCharm等統合開発環境を使用して開発をしている場合、統合開発環境からターミナルを立ち上げると、自動的にpoetry shellが実行された状態になります。従って下記のコマンドを使用することはあまりありません。
仮想環境へのアクセス
仮想環境内で指定したコマンドを実行します。
poetry run <コマンド>
仮想環境のアクティベイト
新しいシェルを起動し、仮想環境をアクティブにします。以降実行されたコマンドは、仮想環境内で実行されることになります。
poetry shell
<その他日常的に使うコマンド>
プロジェクトの依存関係をインストール
poetry.lockファイルに基づいて依存関係をインストールし、プロジェクトの仮想環境を構築します。poetry.lockファイルが存在しない場合は、まず依存関係を解決し、新しいロックファイルを生成します。
poetry install
依存関係のロックファイルを生成または更新
pyproject.tomlファイルに基づいて依存関係が解析され、poetry.lockファイルが更新されます。このファイルは、プロジェクトの依存関係の正確なバージョンを記録しているため、再現性のあるビルドを可能にします。
poetry lock
使用するPython Interprerterの表示・変更
Python Interprerterの表示
現在のPoetry仮想環境に関する情報を表示するために使用されます。このコマンドを実行すると、仮想環境のパス、Pythonのバージョン、依存関係のインストール状態など、プロジェクトの環境に関する詳細情報が得られます。
% poetry env info
Virtualenv
Python: 3.12.2
Implementation: CPython
Path: /Users/<<user name>>/git/<<project_name>>/.venv
Executable: /Users/<<user name>>/git/<<project_name>>/.venv/bin/python
Valid: True
Base
Platform: darwin
OS: posix
Python: 3.12.2
Path: /Users/<<user name>>/.pyenv/shims/versions/3.12.2
Executable: /Users/<<user name>>/.pyenv/shims/versions/3.12.2/bin/python3.12
<<user name>>
と<<project_name>>
には実際のユーザ名とプロジェクト名が入ります。
Python Interprerterの変更
<<user name>>
には実際のユーザ名が入ります。
% poetry env use 3.12.3
Using virtualenv: /Users/<<user_name>>/git/<<project_name>>/.venv
使用するPython Interpreterのバージョンを変えたいときに使うと、依存関係の管理が簡単になります。
Pipとの比較
以下にPipとPoetryの比較をテーブル形式でまとめてみました。
特徴 | Poetry | Pip |
---|---|---|
基本機能 | 依存関係管理、パッケージビルド、仮想環境管理 | パッケージのインストール、アンインストール、アップグレード |
設定ファイル | pyproject.toml | requirements.txt |
ロックファイル | poetry.lock | なし |
仮想環境管理 | 内蔵 | venvやvirtualenvと組み合わせて使用 |
依存関係解決 | 強力な依存関係解決と競合の自動解決 | 基本的な依存関係管理のみ |
使いやすさ | コマンドが直感的で、セットアップや管理が簡単 | 非常にシンプルで、ほとんどのプロジェクトで標準的 |
再現性 | ロックファイルで再現性を確保 | 依存関係のバージョン固定が難しい |
統合度 | 総合的なプロジェクト管理ツール | パッケージ管理ツールとして単機能 |
まとめ
インストール方法やよく使うコマンドなど調べてみた結果、今まで以上に理解できたと思います。しかし、実際に使った経験がほとんどないため、理解するのに時間がかかる部分もありました(依存関係とは何なのか、Pipとの違いと使い道に違いはあるのか、など)。
AWS Lambdaのコードをローカル環境で開発するときなど、簡潔・シンプルに実装すべきプロジェクトにはpipが適しており、たくさんのライブラリを必要とし、複雑な依存関係を管理しなければいけないプロジェクトにはPoetryが適していることがわかりました。
参考資料