New Project#
まず、pdm init
で新しいプロジェクトを作成します。
1 2 |
|
PDMでpyproject.toml
ファイルを作成するには、いくつかの質問に答える必要があります。pdm init
のその他の使用方法については、Create your project from a templateを参照してください。
Choose a Python interpreter#
最初に、マシンにインストールされているPythonバージョンのリストからPythonインタプリタを選択する必要があります。インタプリタパスは.pdm-python
に保存され、後続のコマンドで使用されます。後でpdm use
を使用して変更することもできます。
または、PDM_PYTHON
環境変数でPythonインタプリタのパスを指定することもできます。これを設定すると、.pdm-python
に保存されたパスは無視されます。
Using an existing environment
conda
によって作成された環境を再利用するなど、既存の環境を使用することを選択した場合、pdm sync--clean
またはpdm remove
を実行すると、PDMはpyproject.toml
またはpdm.lock
にリストされていない依存関係を削除することに注意してください。これは破壊的な結果をもたらす可能性があります。したがって、複数のプロジェクト間で環境を共有しないようにしてください。
Install Python interpreters with PDM#
Added in version 2.13.0
PDMでは、pdm python install
コマンドを使用して、@indygreg's python-build-standaloneから追加のPythonインタプリタをインストールできます。たとえば、CPython 3.9.8をインストールするには、次のようにします:
1 |
|
pdm python install--list
を使用して、使用可能なすべてのPythonバージョンを表示できます。
これにより、python.install_root
設定で指定された場所にPythonインタプリタがインストールされます。
現在インストールされているPythonインタプリタを一覧表示します。
1 |
|
インストールされているPythonインタプリタを削除します。:
1 |
|
Share installations with Rye
PDMは、Ryeと同じソースを使用してPythonインタプリタをインストールします。Ryeを同時に使用している場合は、python.install_root
をRyeと同じディレクトリに指定して、Pythonインタプリタを共有できます。:
1 |
|
その後、rye toolchain
またはpdm python
を使用してインストールを管理できます。
Installation strategy based on requires-python
#
Added in version 2.16.0
Pythonのversion
が指定されていない場合、PDMはpyproject.toml
のrequires-python
に基づいて、現在のプラットフォーム/アーキテクチャの組み合わせに最も適したものをインストールしようとします(pyproject.tomlまたはrequires-python属性が使用できない場合、インストール可能なすべてのPythonインタプリタが考慮されます)。
デフォルトの方法はmaximum
です。つまり、最も高いバージョンのcPythonインタプリタがインストールされます。
minimum
が優先される場合は、--min
オプションを使用し、version
は空のままにしておきます。
1 |
|
pdm use
(自動インストール機能を含む)にも同じ原則が適用され、CI/CDの無人セットアップコマンドや'既存のpyproject.tomlでのフレッシュスタート'ユースケースに適しています。
Virtualenv or not#
If you choose yes, PDM will create a virtual environment in the project root directory, and use it as the Python interpreter for the project.
Pythonインタプリタを選択すると、プロジェクトの仮想環境を作成するかどうかを確認するメッセージが表示されます。[yes]を選択すると、プロジェクトのルートディレクトリに仮想環境が作成され、プロジェクトのPythonインタプリタとして使用されます。
選択したPythonインタプリタが仮想環境にある場合、PDMはそれをプロジェクト環境として使用し、依存関係をそこにインストールします。そうでない場合は、__pypackages__
がプロジェクトルートに作成され、依存関係がそこにインストールされます。
これら2つのアプローチの違いについては、ドキュメントの対応するセクションを参照してください。
Library or Application#
ライブラリとアプリケーションは多くの点で異なります。つまり、ライブラリは、他のプロジェクトによってインストールおよび使用されることを目的としたパッケージです。ほとんどの場合、PyPIにもアップロードする必要があります。一方、アプリケーションは、エンド・ユーザーに直接対応するものであり、本番環境にデプロイする必要がある場合があります。
PDMでは、ライブラリの作成を選択すると、name
、version
フィールドがpyproject.toml
ファイルに追加されます。また、[build-system]
テーブルがbuild backendに追加されます。これは、プロジェクトを構築して配布する必要がある場合にのみ役立ちます。そのため、プロジェクトをアプリケーションからライブラリに変更する場合は、これらのフィールドをpyproject.toml
に手動で追加する必要があります。また、--no-self
が指定されていない限り、pdm install
またはpdm sync
を実行すると、ライブラリプロジェクトが環境にインストールされます。
pyproject.toml
では、[tool.pdm]
テーブルの下にフィールドdistribution
があります。これがtrueに設定されている場合、PDMはプロジェクトをライブラリとして扱います。
Specify requires-python
#
プロジェクトに適切なrequires-python
値を設定する必要があります。これは、依存関係の解決方法に影響を与える重要なプロパティです。基本的に、各パッケージのrequires-python
は、プロジェクトのrequires-python
の範囲をカバーする必要があります。たとえば、次の設定を考えてみましょう。:
- Project:
requires-python = ">=3.9"
- Package
foo
:requires-python = ">=3.7,<3.11"
依存関係を解決するとResolutionImpossible
が発生します:
1 2 |
|
Because the dependency's requires-python
is >=3.7,<3.11
, it doesn't cover the project's requires-python
range of >=3.9
. In other words, the project promises to work on Python 3.9, 3.10, 3.11 (and so on), but the dependency doesn't support Python 3.11 (or any higher). Since PDM creates a cross-platform lockfile that should work on all Python versions within the requires-python
range, it can't find a valid resolution.
To fix this, you need add a maximum version to requires-python
, like >=3.9,<3.11
.
依存関係のrequires-python
は>=3.7,<3.11
なので、プロジェクトのrequires-python
の範囲>=3.9
はカバーされません。言い換えれば、プロジェクトはPython 3.9、3.10、3.11(など)で動作することを約束していますが、依存関係はPython 3.11(またはそれ以上)をサポートしていません。PDMは、requires-python
の範囲内のすべてのPythonバージョンで動作するはずのクロスプラットフォームロックファイルを作成するため、有効な解決策を見つけることができません。これを修正するには、>=3.9, <3.11
のようにrequires-python
に最大バージョンを追加する必要があります。
requires-python
の値は、version specifier as defined in PEP 440です。以下に例を示します。:
requires-python |
Meaning |
---|---|
>=3.7 |
Python 3.7 and above |
>=3.7,<3.11 |
Python 3.7, 3.8, 3.9 and 3.10 |
>=3.6,!=3.8.*,!=3.9.* |
Python 3.6 and above, except 3.8 and 3.9 |
Working with older Python versions#
PDMはPython 3.8以上で動作しますが、作業中のプロジェクトに対して下位のPythonバージョンを使用することもできます。ただし、プロジェクトがライブラリであり、ビルド、パブリッシュ、またはインストールする必要がある場合は、使用するPEP 517ビルドバックエンドが必要な最下位のPythonバージョンをサポートしていることを確認してください。たとえば、デフォルトのバックエンドpdm-backend
はPython 3.7以上でのみ動作するため、Python 3.6を使用するプロジェクトでpdm build
を実行するとエラーが発生します。最新のビルドバックエンドのほとんどはPython 3.6以下のサポートを廃止しているため、Pythonバージョンを3.7以上にアップグレードすることを強くお勧めします。ここでは、一般的に使用されているビルドバックエンドでサポートされているPythonの範囲を示します。PEP 621をサポートしているビルドバックエンドは、PDMでは動作しないため、リストにのみ記載しています。
Backend | Supported Python | Support PEP 621 |
---|---|---|
pdm-backend |
>=3.7 |
Yes |
setuptools>=60 |
>=3.7 |
Experimental |
hatchling |
>=3.7 |
Yes |
flit-core>=3.4 |
>=3.6 |
Yes |
flit-core>=3.2,<3.4 |
>=3.4 |
Yes |
プロジェクトがアプリケーションである場合(つまり、name
メタデータがない場合)、上記のバックエンドの制限は適用されないことに注意してください。したがって、ビルドバックエンドが必要ない場合は、任意のPythonバージョン>=2.7
を使用できます。
Import the project from other package managers#
PipenvやPoetryなどの他のパッケージマネージャツールをすでに使用している場合は、PDMに簡単に移行できます。PDMにはimport
コマンドが用意されているため、プロジェクトを手動で初期化する必要はなく、次の機能がサポートされています。
- Pipenvの
Pipfile
pyproject.toml
の詩のセクションpyproject.toml
内のフリットのセクション- pipで使用される
requirements.txt
形式 - setuptools
setup.py
(プロジェクト環境にsetuptools
がインストールされている必要があります。これを行うには、venvに対してvenv.with_pip
をtrue
に、__pypackages__
に対してpdm add setuptools
を設定します)
また、pdm init
またはpdm install
の実行時に、PDMプロジェクトがまだ初期化されていない場合、PDMはインポート可能なファイルを自動検出できます。
Info
setup.py
を変換すると、プロジェクトインタプリタでファイルが実行されます。setuptools
がインタプリタと一緒にインストールされ、setup.py
が信頼されていることを確認してください。
Working with version control#
pyproject.toml
ファイルをコミットする必要があります。pdm.lock
およびpdm.toml
ファイルをコミットする必要があります。.pdm-python
ファイルは**コミットしないでください。
pyproject.toml
ファイルには、PDMに必要なプロジェクトのビルドメタデータと依存関係が含まれているため、コミットする必要があります。また、他のPythonツールの設定にも一般的に使用されています。pyproject.toml
ファイルの詳細については、Pip documentationを参照してください。
pdm.lock
ファイルをコミットする必要があります。これにより、すべてのインストーラが同じバージョンの依存関係を使用していることを確認できます。依存関係を更新する方法については、update existing dependenciesを参照してください。
pdm.toml
にはいくつかのプロジェクト全体の構成が含まれており、共有のためにコミットすると便利です。
.pdm-python
には、現在のプロジェクトで使用されるPythonパスが保存され、共有する必要はありません。
Show the current Python environment#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
This commandは、プロジェクトで使用されているモードをチェックするのに便利です。:
- Project Packagesが
None
の場合、virtualenv modeが有効になります。 - それ以外の場合は、pep582 modeが有効になります。
これで、新しいPDMプロジェクトが設定され、pyproject.toml
ファイルが取得されました。pyproject.toml
の適切な記述方法については、metadata sectionを参照してください。