Poetry

Pythonパッケージ管理仮想環境依存関係管理プロジェクト管理ビルドツール

GitHub概要

python-poetry/poetry

Python packaging and dependency management made easy

スター33,458
ウォッチ190
フォーク2,353
作成日:2018年2月28日
言語:Python
ライセンス:MIT License

トピックス

dependency-managerpackage-managerpackagingpoetrypython

スター履歴

python-poetry/poetry Star History
データ取得日時: 2025/7/20 02:54

言語バージョン管理ツール

Poetry

概要

Poetryは、Pythonプロジェクトの依存関係管理、パッケージング、仮想環境管理を統合したモダンなツールです。pyproject.tomlファイルによる設定管理とpoetry.lockファイルによる決定論的な依存関係解決により、再現可能なPython開発環境を提供します。NPMやYarnに触発された、現代的なPython開発ワークフローを実現します。

詳細

主な特徴

  • 統合された依存関係管理: パッケージのインストール、更新、削除を一元管理
  • 決定論的ビルド: poetry.lockファイルによる再現可能な環境
  • 自動仮想環境管理: プロジェクトごとの独立した環境を自動作成
  • pyproject.toml標準: PEP 518/621準拠の現代的な設定管理
  • インテリジェントな依存関係解決: バージョン競合を自動解決
  • ビルトインパッケージング: ホイールやsdistの作成機能
  • PyPI統合: パッケージの公開とプライベートリポジトリ対応

アーキテクチャ

Poetryは、プロジェクトルートのpyproject.tomlファイルを設定の中心とし、poetry.lockファイルで具体的なバージョンを記録します。仮想環境はプロジェクトごとに自動作成され、システムPythonから完全に分離されます。

他ツールとの比較

  • vs pip: より高レベルな依存関係管理とプロジェクト構造
  • vs pipenv: より高速な依存関係解決とビルトインパッケージング
  • vs conda: Python特化でより軽量、科学計算以外に最適

メリット・デメリット

メリット

  • 開発体験の向上: 単一ツールで完結する統合ワークフロー
  • 再現可能性: lockファイルによる環境の完全な再現
  • チーム開発: pyproject.tomlとlockファイルでの環境共有
  • モダンな標準: PEP準拠の将来性のある設計
  • 高速な操作: 最適化された依存関係解決アルゴリズム
  • 柔軟な設定: グループ化された依存関係管理
  • プラグインシステム: 拡張可能なアーキテクチャ

デメリット

  • 学習コスト: 従来のpip/virtualenvと異なるワークフロー
  • メモリ使用量: 大規模プロジェクトでの依存関係解決時の負荷
  • エコシステム: 一部のレガシーツールとの互換性問題
  • Windows制限: 一部の機能でPOSIX環境が推奨
  • ストレージ: プロジェクトごとの仮想環境によるディスク使用

参考ページ

書き方の例

インストール(推奨方法)

# pipxを使用(推奨)
pipx install poetry

# または公式インストーラーを使用
curl -sSL https://install.python-poetry.org | python3 -

# macOSの場合、Homebrewも使用可能
brew install poetry

# インストール確認
poetry --version

基本的なプロジェクトの作成

# 新しいプロジェクトを作成
poetry new my-project
cd my-project

# 既存のプロジェクトでPoetryを初期化
poetry init

# プロジェクト構造の確認
tree my-project
# my-project/
# ├── pyproject.toml
# ├── README.md
# ├── my_project/
# │   └── __init__.py
# └── tests/
#     └── __init__.py

依存関係の管理

# パッケージの追加
poetry add requests
poetry add fastapi
poetry add "django>=4.0,<5.0"

# 開発依存関係の追加
poetry add pytest --group dev
poetry add black --group dev
poetry add mypy --group dev

# オプショナルグループの追加
poetry add sphinx --group docs
poetry add --group docs mkdocs

# 特定のPythonバージョンでの追加
poetry add "numpy; python_version >= '3.8'"

# GitHubリポジトリからの追加
poetry add git+https://github.com/user/repo.git
poetry add git+https://github.com/user/repo.git@branch-name

仮想環境の管理

# 仮想環境の情報表示
poetry env info

# 仮想環境のパス表示
poetry env info --path

# 使用可能な仮想環境一覧
poetry env list

# 特定のPythonバージョンを使用
poetry env use python3.11
poetry env use /usr/bin/python3.11

# 仮想環境の削除
poetry env remove python3.11

# 仮想環境での設定
poetry config virtualenvs.in-project true  # プロジェクト内に.venv作成
poetry config virtualenvs.create false     # 仮想環境の自動作成を無効

プロジェクトのインストールと実行

# 依存関係のインストール
poetry install

# プロダクション用(開発依存関係を除く)
poetry install --only main

# 特定のグループのみインストール
poetry install --only dev
poetry install --with docs

# 特定のグループを除外
poetry install --without dev,test

# 仮想環境内でコマンド実行
poetry run python app.py
poetry run pytest
poetry run black .

# 仮想環境のシェルを開始
poetry shell

依存関係の更新と管理

# すべての依存関係を更新
poetry update

# 特定のパッケージのみ更新
poetry update requests

# ロックファイルの再生成(インストールなし)
poetry lock

# 古いロックファイルと同期
poetry install --sync

# 依存関係の確認
poetry show
poetry show --tree
poetry show requests

# 脆弱性のあるパッケージの確認
poetry audit

パッケージの公開

# プロジェクトのビルド
poetry build

# PyPIにログイン(APIトークン推奨)
poetry config pypi-token.pypi your-api-token

# テストPyPIに公開
poetry config repositories.testpypi https://test.pypi.org/legacy/
poetry publish -r testpypi

# PyPIに公開
poetry publish

# ドライランでのテスト
poetry publish --dry-run

設定管理

# Poetryの設定確認
poetry config --list

# キャッシュディレクトリの設定
poetry config cache-dir /path/to/cache

# プライベートリポジトリの設定
poetry config repositories.private-repo https://repo.company.com/simple/
poetry config http-basic.private-repo username password

# 証明書の設定
poetry config certificates.private-repo.cert /path/to/cert.pem

# プロキシの設定
poetry config http-basic.proxy.url http://proxy.company.com:8080

CI/CDでの活用

# GitHub Actions例
name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9, 3.10, 3.11, 3.12]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Install Poetry
      run: |
        curl -sSL https://install.python-poetry.org | python3 -
        echo "$HOME/.local/bin" >> $GITHUB_PATH
    
    - name: Configure Poetry
      run: |
        poetry config virtualenvs.create true
        poetry config virtualenvs.in-project true
    
    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: .venv
        key: poetry-${{ hashFiles('poetry.lock') }}
    
    - name: Install dependencies
      run: poetry install
    
    - name: Run tests
      run: |
        poetry run pytest
        poetry run black --check .
        poetry run mypy .

プロジェクトテンプレートの活用

# カスタムテンプレートの使用
poetry new my-project --src  # src/レイアウト

# パッケージモードの無効化(アプリケーション開発)
# pyproject.tomlに追加
[tool.poetry]
package-mode = false

Poetryプラグインの活用

# プラグインのインストール
poetry self add poetry-plugin-export
poetry self add poetry-plugin-bundle

# requirements.txtの生成
poetry export -f requirements.txt --output requirements.txt
poetry export --only dev -f requirements.txt --output dev-requirements.txt

# プラグインの管理
poetry self show plugins
poetry self remove poetry-plugin-export

トラブルシューティング

# キャッシュのクリア
poetry cache clear pypi --all

# Poetryのアップデート
poetry self update

# 設定のリセット
poetry config --unset virtualenvs.in-project

# デバッグ情報の表示
poetry debug info
poetry debug resolve

# 環境の完全リセット
poetry env remove --all
poetry cache clear --all pypi