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、ロックファイルの関係を理解する。

試してみる — Requirements ↔ Pyproject

フルツールを開く