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つのファイルに
- 自己参照グループ --
devグループが他のグループを参照可能 -rインクルード不要 -- TOMLはファイルインクルードが不要- ビルドツール統合 --
hatch、pdm、poetryがグループをネイティブに理解 - 発見しやすい -- ユーザーがすべての利用可能なextrasを一箇所で確認可能
ユースケース
4つの別々のrequirementsファイル(本番、テスト、lint、docs)を、名前付きのoptional-dependencyグループを持つクリーンなpyproject.tomlに統合する。