requirements.txtロックファイルからpyproject.tomlへ
pyproject.tomlの抽象的な依存関係とpip freezeからの具体的なロックファイルの違いを理解する。最新のPythonロックファイルエコシステムを学びます。
Advanced Features
詳細な説明
Pythonパッケージングの重要な概念は、抽象的な依存関係(プロジェクトが必要とするもの)と具体的な依存関係(正確に解決されたバージョン)の区別です。pyproject.tomlは抽象的な依存関係用、ロックファイルは具体的な依存関係用です。
pip freeze出力(ロックファイル):
certifi==2023.11.17
charset-normalizer==3.3.2
idna==3.6
requests==2.31.0
urllib3==2.1.0
適切なpyproject.toml(抽象的):
[project]
dependencies = [
"requests>=2.31",
]
ロックファイルエコシステム:
| ツール | ロックファイル | pyproject.tomlから? |
|---|---|---|
pip-tools |
requirements.txt |
はい(pip-compile pyproject.toml) |
pdm |
pdm.lock |
はい(ネイティブ) |
poetry |
poetry.lock |
はい(ネイティブ) |
重要: pip freezeの出力を直接pyproject.tomlに入れないでください。フリーズ出力にはトランジティブ依存関係(依存関係の依存関係)が含まれており、明示的に宣言すべきではありません。pyproject.tomlには直接的な依存関係のみを記載し、残りはロックツールに任せましょう。
ユースケース
pip-toolsやpdmを使用した最新のPythonツーリングにプロジェクトを移行する際の、requirements.txt、pyproject.toml、ロックファイルの関係を理解する。