環境マーカー(プラットフォーム固有の依存関係)

python_versionやsys_platformのようなPEP 508環境マーカーを含むrequirements.txtエントリをpyproject.tomlに変換する方法。プラットフォーム固有の依存関係を正しく処理します。

Advanced Features

詳細な説明

環境マーカー(PEP 508)を使用すると、対象環境に基づいて条件付きで依存関係を含めることができます。一般的なマーカーにはpython_versionsys_platformos_nameimplementation_nameがあります。

マーカー付きrequirements.txt:

gunicorn>=21.2 ; sys_platform != "win32"
uvloop>=0.19 ; sys_platform != "win32"
winloop>=0.1 ; sys_platform == "win32"
typing-extensions>=4.8 ; python_version < "3.12"
tomli>=2.0 ; python_version < "3.11"

pyproject.tomlに変換:

[project]
dependencies = [
    "gunicorn>=21.2 ; sys_platform != 'win32'",
    "uvloop>=0.19 ; sys_platform != 'win32'",
    "winloop>=0.1 ; sys_platform == 'win32'",
    "typing-extensions>=4.8 ; python_version < '3.12'",
    "tomli>=2.0 ; python_version < '3.11'",
]

利用可能な環境マーカー:

マーカー 説明 値の例
python_version Pythonメジャー.マイナー "3.11""3.12"
sys_platform OSプラットフォーム文字列 "linux""win32""darwin"
os_name OS名 "posix""nt"
platform_machine CPUアーキテクチャ "x86_64""aarch64"

一般的なパターン:

  • クロスプラットフォームサーバー:Linux/macOSではgunicorn、Windowsではwaitress
  • バックポートパッケージ:Python < 3.11の場合のみtomliを含める(tomllibがstdlibに追加された時)
  • パフォーマンスパッケージ:Windows以外のプラットフォームでのみuvloopをインストール

マーカーは変換時にそのまま保持されます。

ユースケース

Windows、Linux、macOS向けのプラットフォーム固有の依存関係と、Pythonバージョンのバックポートパッケージを含むクロスプラットフォームCLIツールのrequirementsを変換する。

試してみる — Requirements ↔ Pyproject

フルツールを開く