Lock for specific platforms or Python versions#
Added in version 2.17.0
デフォルトでは、PDMは、pyproject.toml
のrequires-python
で指定されたPythonバージョン内のすべてのプラットフォームで動作するロックファイルを作成しようとします。これは、開発時に非常に便利です。開発環境でロックファイルを生成し、このロックファイルを使用して、CI/CDまたは本稼働環境で同じ依存関係バージョンを複製できます。
ただし、この方法がうまくいかない場合もあります。たとえば、プロジェクトまたは依存関係に、次のようなプラットフォーム固有の依存関係や、Pythonのバージョンに応じた条件付きの依存関係があるとします。
1 2 3 4 5 6 7 8 |
|
この場合、すべてのプラットフォームおよびPythonバージョン(>=3.8
)で各パッケージに対して単一の解決を得ることはほとんど不可能です。代わりに、特定のプラットフォームまたはPythonバージョンに対してロックファイルを作成する必要があります。
Specify lock target when generating lock file#
PDMでは、ロックファイルの生成時に1つ以上の環境条件を指定できます。これらの条件には次のものがあります。:
--python=<PYTHON_RANGE>
:PEP 440互換のPythonバージョン指定子です。例えば、--python=">=3.8,<3.10"
は、Pythonバージョン>=3.8
と<3.10
のロックファイルを生成します。便宜上、--python=3.10
は--python=">=3.10"
と同じで、Python 3.10以降を解決することを意味します。--platform=<PLATFORM>
:プラットフォーム指定子。たとえば、pdm lock--platform=linux
と指定すると、Linux x86_64プラットフォーム用のロックファイルが生成されます。使用可能なオプションは次のとおりです。:linux
windows
macos
alpine
windows_amd64
windows_x86
windows_arm64
macos_arm64
macos_x86_64
macos_X_Y_arm64
macos_X_Y_x86_64
manylinux_X_Y_x86_64
manylinux_X_Y_aarch64
musllinux_X_Y_x86_64
musllinux_X_Y_aarch64
--implementation=cpython pypy pyston
:Pythonの実装指定子です。現在はcpython
、pypy
、pyston
のみがサポートされています。
いくつかの条件を無視することもできます。たとえば、--platform=linux
だけを指定すると、生成されたロックファイルはLinuxプラットフォームとすべての実装に適用されます。
python
criterion and requires-python
ロックターゲットの--python
オプションまたはrequires-python
基準は、pyproject.toml
のrequires-python
によって制限されています。たとえば、requires-python
が>=3.8
で、--python="<3.11"
を指定した場合、ロックターゲットは>=3.8,<3.11
になります。
Separate lock files or merge into one#
複数のロックターゲットが必要な場合は、ターゲットごとに個別のロックファイルを作成するか、それらを1つのロックファイルに結合できます。PDMは両方の方法をサポートしています。
特定のターゲットで個別のロック・ファイルを作成するには、次のようにします。:
1 2 |
|
LinuxおよびPython 3.8に依存関係をインストールする場合は、次のロックファイルを使用できます。:
1 |
|
さらに、ロックファイルの依存関係グループのサブセットを選択することもできます。詳細については、hereを参照してください。
複数のターゲットに同じロックファイルを使用する場合は、pdm lock
コマンドに--append
を追加します。
1 2 |
|
単一のロック・ファイルを使用する利点は、依存性を更新するときに複数のロック・ファイルを管理する必要がないことです。ただし、単一のロック・ファイル内の異なるターゲットに対して異なるロック方針を指定することはできません。また、ロックの更新にかかる時間コストは高くなることが予想されます。
さらに、各ロック・ファイルは1つ以上のロック・ターゲットを持つことができるため、かなり柔軟に使用できます。ロック・ファイル内のいくつかのターゲットをマージし、特定のグループとターゲットを別々のロック・ファイルにロックすることを選択できます。これについては、次のセクションで例を使用して説明します。
Example#
以下にpyproject.toml
の内容を示します。:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
上記の例では、numpy
の条件付き依存関係バージョンと、WindowsとMacOSのプラットフォーム固有のオプションの依存関係があります。Linux、Windows、MacOSプラットフォーム、Python 3.8と3.9用のロックファイルを生成したいと思います。
1 2 3 4 5 |
|
上記のコマンドを順番に実行すると、3つのロックファイルが表示されます。:
pdm.lock
:デフォルトのメインロックファイルで、すべてのプラットフォームと>=3.8
のPythonバージョンで動作します。プラットフォーム固有の依存関係は含まれていません。このロックファイルにはnumpy
の2つのバージョンがあり、それぞれPython 3.9以上と以下に適しています。PDMインストーラはPythonのバージョンに従って正しいバージョンを選択します。py39-windows.lock
:Windowsプラットフォームおよび上記のPython 3.9用のロックファイルで、Windows用のオプションの依存関係を含みます。py39-macos.lock
:上記のMacOSプラットフォームおよびPython 3.9用のロックファイルで、MacOS用のオプションの依存関係を含みます。