プロジェクトを構成する#
PDM の config
コマンドは git config
と同様に機能しますが、構成を表示するために --list
は必要ありません。
現在の構成を表示します:
1 |
|
単一の構成を取得します:
1 |
|
構成値を変更し、ホーム構成に保存します:
1 |
|
デフォルトでは、構成はグローバルに変更されますが、このプロジェクトでのみ構成を表示する場合は、--local
フラグを追加します:
1 |
|
ローカル構成はプロジェクトルートディレクトリの pdm.toml
に保存されます。
構成ファイル#
構成ファイルは次の順序で検索されます:
<PROJECT_ROOT>/pdm.toml
- プロジェクト構成<CONFIG_ROOT>/config.toml
- ホーム構成<SITE_CONFIG_ROOT>/config.toml
- サイト構成
<CONFIG_ROOT>
は次の場所です:
- Linux では XDG Base Directory Specification で定義されているように
$XDG_CONFIG_HOME/pdm
(ほとんどの場合 ~/.config/pdm
) - macOS では Apple File System Basics で定義されているように
~/Library/Application Support/pdm
- Windows では Known folders で定義されているように
%USERPROFILE%\AppData\Local\pdm
<SITE_CONFIG_ROOT>
は次の場所です:
- Linux では XDG Base Directory Specification で定義されているように
$XDG_CONFIG_DIRS/pdm
(ほとんどの場合 /etc/xdg/pdm
) - macOS では Apple File System Basics で定義されているように
/Library/Application Support/pdm
- Windows では Known folders で定義されているように
C:\ProgramData\pdm\pdm
-g/--global
オプションが使用される場合、最初の項目は <CONFIG_ROOT>/global-project/pdm.toml
に置き換えられます。
利用可能なすべての構成項目は 構成ページ にあります。
Python ファインダーを構成する#
デフォルトでは、PDM は次のソースで Python インタープリターを検索します:
venv
: PDM 仮想環境の場所path
:PATH
環境変数pyenv
: pyenv インストールルートrye
: rye ツールチェーンインストールルートasdf
: asdf python インストールルートwinreg
: Windows レジストリ
いくつかのソースを選択解除したり、順序を変更したりするには、python.providers
構成キーを設定します:
1 2 |
|
解決結果にプレリリースを許可する#
デフォルトでは、pdm
の依存関係解決ツールは、依存関係の指定されたバージョン範囲に安定版がない場合を除き、プレリリースを無視します。この動作は [tool.pdm.resolution]
テーブルで allow-prereleases
を true
に設定することで変更できます:
1 2 |
|
パッケージインデックスを構成する#
PDM にパッケージを見つける場所を指定するには、pyproject.toml
にソースを追加するか、pypi.*
構成を介して行います。
pyproject.toml
にソースを追加します:
1 2 3 4 |
|
pdm config
を介してデフォルトのインデックスを変更します:
1 |
|
pdm config
を介して追加のインデックスを追加します:
1 |
|
利用可能な構成オプションは次のとおりです:
url
: インデックスの URLverify_ssl
: (オプション) SSL 証明書を検証するかどうか、デフォルトは trueusername
: (オプション) インデックスのユーザー名password
: (オプション) インデックスのパスワードtype
: (オプション) index または find_links、デフォルトは index
ソースタイプについて
デフォルトでは、すべてのソースは pip の --index-url
および --extra-index-url
のような PEP 503 スタイルの "インデックス" と見なされますが、タイプを find_links
に設定することで、ファイルやリンクを直接検索することができます。2 つのタイプの違いについては この回答 を参照してください。
たとえば、ローカルディレクトリをソースとして使用するには:
1 2 3 4 |
|
これらの構成は次の順序で読み取られ、最終的なソースリストが構築されます:
pypi.url
、pyproject.toml
のname
フィールドにpypi
が表示されない場合pyproject.toml
のソース- PDM 構成の
pypi.<name>.url
pypi.ignore_stored_index
を true
に設定して、PDM 構成からのすべての追加インデックスを無効にし、pyproject.toml
に指定されたもののみを使用することができます。
デフォルトの PyPI インデックスを無効にする
デフォルトの PyPI インデックスを省略したい場合は、ソース名を pypi
に設定するだけで、そのソースが 置き換え られます。
1 2 3 4 |
|
pyproject.toml または構成のインデックス
プロジェクトを使用する他の人とインデックスを共有したい場合は、pyproject.toml
に追加する必要があります。
たとえば、いくつかのパッケージはプライベートインデックスにのみ存在し、インデックスを構成しないとインストールできません。
それ以外の場合は、他の人には表示されないローカル構成に保存します。
ソースの順序を尊重する#
デフォルトでは、すべてのソースは同等と見なされ、パッケージはバージョンとホイールタグでソートされ、最も一致するものが選択されます。
場合によっては、優先ソースからパッケージを返し、他のソースから見つからない場合に検索することを望むかもしれません。PDM は respect-source-order
構成を読み取ることでこれをサポートします。たとえば:
1 2 3 4 5 6 7 8 9 10 |
|
パッケージは最初に private
インデックスから検索され、一致するバージョンが見つからない場合にのみ、pypi
インデックスから検索されます。
個々のパッケージのインデックスを指定する#
include_packages
および exclude_packages
構成を使用して、パッケージを特定のソースにバインドできます。
1 2 3 4 5 |
|
上記の構成では、foo
または foo-*
に一致するパッケージは private
インデックスからのみ検索され、bar-*
に一致するパッケージは private
を除くすべてのインデックスから検索されます。
include_packages
および exclude_packages
はどちらもオプションであり、グロブパターンのリストを受け入れ、パターンが一致する場合に include_packages
が排他的に適用されます。
インデックスとともに資格情報を保存する#
${ENV_VAR}
変数展開を使用して URL に資格情報を指定でき、これらの変数は環境変数から読み取られます:
1 2 3 |
|
HTTPS 証明書を構成する#
HTTPS リクエスト用にカスタム CA バンドルまたはクライアント証明書を使用できます。これは、インデックス(パッケージのダウンロード用)とリポジトリ(アップロード用)の両方に構成できます:
1 2 |
|
さらに、標準の certifi 証明書の代わりにシステムの信頼ストアを使用して HTTPS 証明書を検証することも可能です。このアプローチは、追加の構成なしで企業プロキシ証明書をサポートすることが一般的です。
truststore
を使用するには、Python 3.10 以降が必要であり、truststore
を PDM と同じ環境にインストールする必要があります:
1 |
|
さらに、REQUESTS_CA_BUNDLE
および CURL_CA_BUNDLE
環境変数で指定された CA 証明書も設定されている場合に使用されます。
インデックス構成のマージ#
インデックス構成は [[tool.pdm.source]]
テーブルの name
フィールドまたは構成ファイルの pypi.<name>
キーでマージされます。
これにより、URL と資格情報を別々に保存して、ソース管理で秘密が公開されないようにすることができます。
たとえば、次の構成がある場合:
1 2 3 |
|
構成ファイルに資格情報を保存できます:
1 2 |
|
PDM は private
インデックスの構成を両方の場所から取得できます。
インデックスにユーザー名とパスワードが必要ですが、環境変数や構成ファイルから見つからない場合、PDM は入力を求めます。また、keyring
がインストールされている場合は、資格情報ストアとして使用されます。PDM はインストールされたパッケージまたは CLI からの keyring
を使用できます。
中央インストールキャッシュ#
システム上の多くのプロジェクトでパッケージが必要な場合、各プロジェクトは独自のコピーを保持する必要があります。これは、特にデータサイエンスや機械学習プロジェクトでは、ディスクスペースの無駄になる可能性があります。
PDM は、中央パッケージリポジトリにインストールして、異なるプロジェクトでそのインストールにリンクすることにより、同じホイールのインストールをキャッシュすることをサポートします。有効にするには、次のコマンドを実行します:
1 |
|
コマンドに --local
オプションを追加することで、プロジェクトごとに有効にすることができます。
キャッシュは $(pdm config cache_dir)/packages
にあります。pdm cache info
を使用してキャッシュの使用状況を表示できます。キャッシュされたインストールは自動的に管理されるため、プロジェクトにリンクされていない場合は削除されることに注意してください。ディスクからキャッシュを手動で削除すると、システム上の一部のプロジェクトが壊れる可能性があります。
さらに、いくつかの異なるリンク方法がサポートされています:
symlink
(デフォルト)、パッケージファイルへのシンボリックリンクを作成します。hardlink
、キャッシュエントリのパッケージファイルへのハードリンクを作成します。
次のコマンドを実行して、リンク方法を切り替えることができます: pdm config [--local] install.cache_method <method>
。
Note
パッケージソースのいずれかからインストールされたパッケージのみがキャッシュされます。
アップロード用のリポジトリを構成する#
pdm publish
コマンドを使用する場合、リポジトリの秘密は グローバル 構成ファイル (<CONFIG_ROOT>/config.toml
) から読み取られます。構成ファイルの内容は次のとおりです:
1 2 3 4 5 6 7 8 9 |
|
または、これらの資格情報を環境変数で提供できます:
1 2 3 4 |
|
PEM エンコードされた証明書認証局バンドル (ca_certs
) は、サーバー証明書が標準の certifi CA バンドルによって署名されていないローカル/カスタム PyPI リポジトリに使用できます。
Note
リポジトリは前のセクションのインデックスとは異なります。リポジトリは公開用であり、インデックスはロックおよび解決用です。これらは構成を共有しません。
Tip
pypi
および testpypi
リポジトリの url
を構成する必要はありません。デフォルト値で埋められます。
ユーザー名、パスワード、および証明書認証局バンドルは、それぞれ --username
、--password
、および --ca-certs
を介して pdm publish
のコマンドラインから渡すことができます。
コマンドラインからリポジトリ構成を変更するには、pdm config
コマンドを使用します:
1 2 3 4 5 |
|
keyring を使用したパスワード管理#
keyring が利用可能でサポートされている場合、パスワードは構成ファイルに書き込む代わりに keyring に保存および取得されます。これは、インデックスとアップロードリポジトリの両方をサポートします。サービス名は、インデックスの場合は pdm-pypi-<name>
、リポジトリの場合は pdm-repository-<name>
になります。
keyring を有効にするには、PDM と同じ環境に keyring
をインストールするか、グローバルにインストールします。PDM 環境に keyring を追加するには:
1 |
|
または、keyring をグローバルにインストールしている場合は、CLI が PATH
環境変数に公開されていることを確認して、PDM によって検出可能にします:
1 |
|
Azure Artifacts 用の keyring を使用したパスワード管理#
Azure Artifacts に対して認証を試みる場合、AD グループを使用して認証することができます: pdm self add keyring artifacts-keyring
を実行して、認証に artifacts-keyring が使用されることを確認します。
次に、アーティファクトの URL を pyproject.toml
に追加します
1 2 3 |
|
ロックファイルから特定のパッケージとその依存関係を除外する#
Added in version 2.12.0
コードが使用しないことが確実な特定のパッケージをロックファイルに含めたくない場合があります。この場合、依存関係の解決中にそれらを完全にスキップできます:
1 2 |
|
この構成を使用すると、requests
はロックファイルにロックされず、他のパッケージによって依存されていない限り、その依存関係(urllib3
や idna
など)も解決結果に表示されません。インストーラーはそれらをピックアップできません。
すべての pdm 呼び出しに定数引数を渡す#
Added in version 2.7.0
個々の pdm コマンドに渡される追加オプションを tool.pdm.options
構成で追加できます:
1 2 3 4 |
|
これらのオプションはコマンド名の直後に追加されます。たとえば、上記の構成に基づいて、
pdm add requests
は pdm add --no-isolation --no-self requests
と同等です。
パッケージ警告を無視する#
Added in version 2.10.0
依存関係を解決するときに次のような警告が表示されることがあります:
1 2 3 4 5 |
|
これは、パッケージのサポートされている Python バージョンの範囲が pyproject.toml
に指定された requires-python
値をカバーしていないためです。
これらの警告をパッケージごとに無視するには、次の構成を追加します:
1 2 |
|
各項目はパッケージ名に一致する大文字小文字を区別しないグロブパターンです。