pyproject.tomlのオプショナル依存関係グループ

複数のrequirementsファイル(requirements-dev.txt、requirements-test.txt)を、整理されたpyproject.tomlのoptional-dependencyグループに変換する方法を学びます。

Advanced Features

詳細な説明

pyproject.toml[project.optional-dependencies]セクションは、複数のrequirements-*.txtファイルを持つ一般的なパターンを置き換えます。各グループはpip install -e ".[group]"で独立してインストールできます。

従来のマルチファイルアプローチ:

# requirements.txt(本番)
flask>=3.0
sqlalchemy>=2.0

# requirements-test.txt
-r requirements.txt
pytest>=7.4
pytest-cov>=4.1

# requirements-lint.txt
ruff>=0.1.6
mypy>=1.7

統合されたpyproject.toml:

[project]
dependencies = [
    "flask>=3.0",
    "sqlalchemy>=2.0",
]

[project.optional-dependencies]
test = [
    "pytest>=7.4",
    "pytest-cov>=4.1",
]
lint = [
    "ruff>=0.1.6",
    "mypy>=1.7",
]
dev = [
    "my-project[test,lint]",
]

オプショナルグループの利点:

  1. 単一の情報源 -- すべての依存関係が1つのファイルに
  2. 自己参照グループ -- devグループが他のグループを参照可能
  3. -rインクルード不要 -- TOMLはファイルインクルードが不要
  4. ビルドツール統合 -- hatchpdmpoetryがグループをネイティブに理解
  5. 発見しやすい -- ユーザーがすべての利用可能なextrasを一箇所で確認可能

ユースケース

4つの別々のrequirementsファイル(本番、テスト、lint、docs)を、名前付きのoptional-dependencyグループを持つクリーンなpyproject.tomlに統合する。

試してみる — Requirements ↔ Pyproject

フルツールを開く