「requirements.txtの管理が面倒すぎる…」
「仮想環境とパッケージ管理を一緒にやりたい」
「プロジェクトの依存関係がぐちゃぐちゃになってきた」
Pythonでプログラミングをしていると、パッケージ(ライブラリ)の管理って意外と大変ですよね。そんな悩みを一気に解決してくれるのがPoetry(ポエトリー)です。
Poetryは、パッケージのインストール、依存関係の管理、仮想環境の作成など、Pythonプロジェクトに必要な作業を全て1つのツールで完結できる優れものなんです。
この記事では、Poetryの基本から実践的な使い方まで、初心者の方でも分かるように丁寧に解説していきますね。
Poetryって何?基本を理解しよう

Poetryの正体
Poetryは、Pythonのパッケージ管理ツールであり、依存関係管理ツールでもあります。
簡単に言えば、「このプロジェクトにはどんなライブラリが必要で、それぞれどのバージョンを使うか」を賢く管理してくれるツールです。
さらに、仮想環境の作成やパッケージの公開まで、開発に必要な様々な機能を提供してくれます。
従来の方法との違い
これまでPythonでは、こんな風に管理していました:
従来の方法:
# 仮想環境を作る
python -m venv venv
# 仮想環境を有効化
source venv/bin/activate # Linuxの場合
# パッケージをインストール
pip install requests flask
# インストール済みパッケージを保存
pip freeze > requirements.txt
この方法の問題点:
- 仮想環境とパッケージ管理が別々のツール
- requirements.txtは「結果」だけで「意図」が分からない
- 依存関係の依存関係(間接的な依存)も全部混ざる
- バージョン管理が難しい
- プロジェクトごとに同じ作業の繰り返し
Poetryなら:
# プロジェクトを作成(仮想環境も自動作成)
poetry new my-project
# パッケージを追加
poetry add requests flask
# これだけ!
全ての情報がpyproject.tomlという1つのファイルで管理され、必要なパッケージとそのバージョンが明確に記録されます。
なぜPoetryが便利なのか
Poetryの魅力を具体的に見ていきましょう。
1. 依存関係の解決が賢い
Poetryは、パッケージ同士の相性を自動でチェックしてくれます。
例えば、パッケージAがバージョン1.0を要求していて、パッケージBがバージョン2.0を要求している場合、自動的に互換性のあるバージョンを見つけてくれるんです。
2. 決定論的インストール
poetry.lockというファイルで、「誰が、いつ、どこで」インストールしても、完全に同じバージョン構成を再現できます。
チーム開発で「自分の環境では動くのに、他の人の環境では動かない」という問題を防げますね。
3. 開発用と本番用を分離
開発時だけ必要なツール(テストツールやリンターなど)と、本番環境で必要なパッケージを分けて管理できます。
# 本番用パッケージ
poetry add requests
# 開発用パッケージ
poetry add --group dev pytest black
4. 仮想環境を自動管理
Poetryが自動的に仮想環境を作成・管理してくれます。手動でvenvを作る必要がありません。
5. プロジェクト情報の一元管理
プロジェクト名、バージョン、作者、依存パッケージなど、全ての情報がpyproject.tomlという標準ファイルに集約されます。
Poetryをインストールしよう
実際に使い始めてみましょう。
公式推奨のインストール方法
Linux、macOS、WSLの場合:
curl -sSL https://install.python-poetry.org | python3 -
Windowsの場合(PowerShell):
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
パスを通す
インストール後、パスを追加する必要があります。
Linux、macOSの場合:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Windowsの場合:
環境変数に%APPDATA%\Python\Scriptsを追加します。
インストール確認
正しくインストールされたか確認:
poetry --version
バージョン番号が表示されればOKです。
アップデート方法
Poetryを最新版にアップデート:
poetry self update
新しいプロジェクトを作成しよう
Poetryでプロジェクトを始める方法を見ていきましょう。
新規プロジェクトの作成
新しいプロジェクトをゼロから作る場合:
poetry new my-awesome-project
こんなフォルダ構造が自動生成されます:
my-awesome-project/
├── pyproject.toml
├── README.md
├── my_awesome_project/
│ └── __init__.py
└── tests/
└── __init__.py
解説:
pyproject.toml:プロジェクトの設定ファイルmy_awesome_project/:実際のコードを書く場所tests/:テストコードを書く場所
既存のプロジェクトにPoetryを導入
すでにプロジェクトがある場合:
cd existing-project
poetry init
対話形式で必要な情報を入力すると、pyproject.tomlが作られます。
対話例:
Package name [existing-project]:
Version [0.1.0]:
Description []: 素晴らしいプロジェクト
Author [Your Name <you@example.com>, n to skip]:
License []: MIT
Compatible Python versions [^3.9]:
Would you like to define your main dependencies interactively? (yes/no) [yes] yes
質問に答えていくだけで、設定ファイルが完成します。
pyproject.tomlを理解しよう
Poetryの中心となるファイルを詳しく見ていきましょう。
基本的な構造
pyproject.toml
[tool.poetry]
name = "my-awesome-project"
version = "0.1.0"
description = "素晴らしいプロジェクト"
authors = ["Your Name <you@example.com>"]
license = "MIT"
readme = "README.md"
python = “^3.9” requests = “^2.31.0” flask = “^3.0.0”
pytest = “^7.4.0” black = “^23.7.0” flake8 = “^6.1.0”
requires = [“poetry-core”] build-backend = “poetry.core.masonry.api”
各セクションの説明
[tool.poetry]
プロジェクトの基本情報が入ります。
[tool.poetry.dependencies]
本番環境で必要なパッケージのリストです。
バージョン指定の記号:
^2.31.0:2.31.0以上、3.0.0未満(メジャーバージョンは固定)~2.31.0:2.31.0以上、2.32.0未満(マイナーバージョンも固定)>=2.31.0:2.31.0以上ならなんでもOK==2.31.0:2.31.0のみ(完全固定)
[tool.poetry.group.dev.dependencies]
開発時のみ必要なパッケージです。
[build-system]
ビルドツールの指定(通常は変更不要)。
パッケージを管理しよう

実際の開発で使う、パッケージ管理のコマンドを見ていきます。
パッケージを追加
基本的な追加:
poetry add requests
特定のバージョンを指定:
poetry add "requests==2.31.0"
poetry add "requests>=2.30.0,<3.0.0"
開発用パッケージとして追加:
poetry add --group dev pytest black
複数まとめて追加:
poetry add requests flask numpy pandas
パッケージを削除
poetry remove requests
開発用パッケージを削除:
poetry remove --group dev pytest
パッケージを更新
全パッケージを更新:
poetry update
特定のパッケージだけ更新:
poetry update requests
更新可能なパッケージを確認(実際には更新しない):
poetry show --outdated
インストール済みパッケージを確認
シンプルなリスト表示:
poetry show
詳細情報付きで表示:
poetry show --tree
これで、依存関係がツリー構造で見えます。
特定のパッケージの詳細:
poetry show requests
仮想環境を使いこなそう
Poetryの仮想環境管理機能を見ていきましょう。
仮想環境の作成
プロジェクトでパッケージを追加すると、自動的に仮想環境が作られます:
poetry add requests
初回実行時に、自動的に仮想環境が生成されるんです。
仮想環境の場所を確認
poetry env info
仮想環境のパスや、使用中のPythonバージョンが表示されます。
仮想環境を有効化
シェルを起動:
poetry shell
これで仮想環境がアクティブになり、通常のpythonコマンドでPoetryの環境が使えます。
終了する時は:
exit
コマンドを仮想環境内で実行
シェルを起動せずに、1回だけコマンドを実行:
poetry run python script.py
poetry run pytest
poetry run python -m flask run
poetry runを付けることで、自動的に仮想環境内で実行されます。
仮想環境をリセット
環境をクリーンな状態に戻したい時:
poetry env remove python
次回パッケージ追加時に、新しい環境が作られます。
プロジェクト内に仮想環境を作る
デフォルトでは、仮想環境はPoetryの管理下(ユーザーフォルダ)に作られますが、プロジェクト内の.venvフォルダに作ることもできます:
poetry config virtualenvs.in-project true
これで、プロジェクトフォルダ内に.venvが作られるようになります。
実践的な使用例
実際のプロジェクトでの使い方を見ていきましょう。
例1:Webアプリケーションの開発
Flaskアプリを作る場合:
1. プロジェクト作成
poetry new my-web-app
cd my-web-app
2. 必要なパッケージを追加
poetry add flask python-dotenv
poetry add --group dev pytest black flake8
3. アプリケーションコードを書く
my_web_app/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Poetry!'
if __name__ == '__main__':
app.run(debug=True)
4. 実行
poetry run python my_web_app/app.py
例2:データ分析プロジェクト
データ分析用のプロジェクト:
poetry new data-analysis
cd data-analysis
# データ分析用パッケージを追加
poetry add pandas numpy matplotlib seaborn jupyter
# Jupyter Notebookを起動
poetry run jupyter notebook
例3:既存プロジェクトからインストール
他の人が作ったPoetryプロジェクトをクローンした場合:
git clone https://github.com/user/awesome-project.git
cd awesome-project
# pyproject.tomlとpoetry.lockから環境を再現
poetry install
poetry installで、poetry.lockに記録された完全に同じバージョン構成が再現されます。
例4:スクリプトの追加
よく使うコマンドをpyproject.tomlに登録できます:
pyproject.toml
[tool.poetry.scripts]
start = "my_web_app.app:main"
test = "pytest:main"
これで、こんな風に実行できます:
poetry run start
poetry run test
例5:環境変数の管理
開発用と本番用で設定を分ける:
.env(開発用)
DEBUG=True
DATABASE_URL=sqlite:///dev.db
コードで読み込む:
import os
from dotenv import load_dotenv
load_dotenv()
debug = os.getenv('DEBUG', 'False') == 'True'
db_url = os.getenv('DATABASE_URL')
python-dotenvを追加:
poetry add python-dotenv
チーム開発での使い方
複数人で開発する時のベストプラクティスです。
初回セットアップ
リポジトリをクローン:
git clone https://github.com/team/project.git
cd project
環境をセットアップ:
poetry install
これだけで、開発に必要な全ての環境が整います。
新しいパッケージを追加した時
開発者Aがパッケージを追加:
poetry add requests
git add pyproject.toml poetry.lock
git commit -m "Add requests package"
git push
開発者Bが同期:
git pull
poetry install
poetry.lockがコミットされているので、全員が同じバージョンを使えます。
gitignoreの設定
.gitignore
# Poetry
__pypackages__/
# 仮想環境(プロジェクト内に作った場合)
.venv/
# キャッシュ
*.pyc
__pycache__/
重要: poetry.lockは.gitignoreに入れないでください。これがあるからこそ、環境が再現できるんです。
よくあるコマンド一覧
日常的によく使うコマンドをまとめました。
プロジェクト管理
poetry new project-name # 新規プロジェクト作成
poetry init # 既存プロジェクトに導入
パッケージ管理
poetry add package-name # パッケージを追加
poetry add --group dev package-name # 開発用パッケージを追加
poetry remove package-name # パッケージを削除
poetry update # 全パッケージを更新
poetry update package-name # 特定パッケージを更新
poetry show # インストール済みパッケージ一覧
poetry show --tree # 依存関係をツリー表示
poetry show --outdated # 更新可能なパッケージ
環境管理
poetry install # pyproject.tomlから環境構築
poetry shell # 仮想環境を有効化
poetry run command # 仮想環境内でコマンド実行
poetry env info # 環境情報を表示
poetry env list # 環境のリスト
poetry env remove python # 環境を削除
その他
poetry config --list # 設定一覧
poetry check # pyproject.tomlの検証
poetry version # バージョン情報
poetry self update # Poetry自体をアップデート
よくある問題と解決法
Poetryを使っていると遭遇する、典型的な問題と対処法です。
問題1:依存関係が解決できない
エラー:
SolverProblemError: The current project's Python requirement (>=3.9) is not compatible with...
原因:
パッケージ同士のバージョン要件が競合している。
解決法:
オプション1:バージョンを緩める
[tool.poetry.dependencies]
python = "^3.9" # ^3.8に緩める
package-a = "^2.0" # より広い範囲を許可
オプション2:競合するパッケージを調査
poetry show --tree
依存関係を確認して、問題のあるパッケージを特定します。
問題2:poetry.lockが古い
エラー:
Warning: poetry.lock is not consistent with pyproject.toml
原因:pyproject.tomlが変更されたのに、poetry.lockが更新されていない。
解決法:
poetry lock --no-update
または、パッケージも更新する場合:
poetry lock
問題3:仮想環境が見つからない
症状:poetry runでエラーが出る。
原因:
仮想環境が壊れている、または作られていない。
解決法:
# 環境を削除
poetry env remove python
# 再インストール
poetry install
問題4:インストールが遅い
原因:
依存関係の解決に時間がかかっている。
解決法:
キャッシュをクリア:
poetry cache clear pypi --all
並列インストールを有効化:
poetry config installer.parallel true
問題5:パッケージがインポートできない
症状:
パッケージをインストールしたのに、Pythonでimportできない。
原因:
Poetry の仮想環境外で Python を実行している。
解決法:
方法1:poetry runを使う
poetry run python script.py
方法2:shellに入る
poetry shell
python script.py
方法3:IDEの設定
VSCodeなどのIDEで、Poetry の仮想環境をインタープリターとして指定します。
pipとの比較
従来のpipと、Poetryの違いをまとめました。
インストール
pip:
pip install requests
echo "requests" >> requirements.txt
Poetry:
poetry add requests
Poetryなら、インストールと記録が同時に行われます。
依存関係の固定
pip:
pip freeze > requirements.txt
これだと、間接的な依存関係も全部混ざります。
Poetry:pyproject.tomlには直接指定したパッケージだけ、poetry.lockに全ての依存関係が記録されます。明確に分離されているんですね。
仮想環境
pip:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Poetry:
poetry install
Poetryは仮想環境を自動管理してくれます。
開発用パッケージ
pip:
# requirements-dev.txt
pytest
black
flake8
Poetry:
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
black = "^23.7.0"
Poetryなら、本番用と開発用が明確に分離されます。
まとめ:Poetryで快適なPython開発を
Poetryは、Python開発を劇的に改善してくれる素晴らしいツールです。
この記事のポイントをおさらい:
- Poetryはパッケージ管理と仮想環境を統合したツール
pyproject.tomlで全てを一元管理できるpoetry.lockで環境の完全再現が可能- 依存関係を賢く解決してくれる
- 開発用と本番用のパッケージを分離できる
poetry addでインストールと記録が同時にできるpoetry runで簡単に仮想環境内でコマンド実行- チーム開発での環境共有が簡単
- 従来のpip + venvより圧倒的に便利
最初は少し慣れが必要かもしれませんが、一度使い始めると、従来の方法には戻れなくなりますよ。
個人プロジェクトでも、チーム開発でも、Poetryを使えば「環境の違いで動かない」という問題から解放されます。この記事が、あなたのPoetry導入の第一歩になれば嬉しいです!

コメント