Configure the Project#
PDMのconfig
コマンドはgit config
と同じように動作しますが、--list
は構成を表示するのに必要ありません。
現在の設定を表示します。
1 |
|
設定を1つ取得します。:
1 |
|
構成値を変更し、ホーム構成に保管します。:
1 |
|
デフォルトでは、設定はグローバルに変更されます。このプロジェクトでのみ表示される設定にしたい場合は、--local
フラグを追加します。:
1 |
|
ローカル構成はすべて、プロジェクトのルートディレクトリの下のpdm.toml
に保存されます。
Configuration files#
構成ファイルは次の順序で検索されます。
<PROJECT_ROOT>/pdm.toml
- プロジェクト構成<CONFIG_ROOT>/config.toml
- ホーム構成<SITE_CONFIG_ROOT>/config.toml
- サイト構成
ここで<CONFIG_ROOT>
は以下のようになります:
- XDG Base Directory Specificationで定義されているLinuxでは
$XDG_CONFIG_HOME/pdm
(ほとんどの場合~/.config/pdm
) - Apple File System Basicsで定義されているmacOSでは
~/Library/Application Support/pdm
- Known foldersで定義されているWindowsでは
%USERPROFILE%\AppData\Local\pdm
<SITE_CONFIG_ROOT>
は次のようになります。:
- XDG Base Directory Specificationで定義されているLinuxでは
$XDG_CONFIG_DIRS/pdm
(ほとんどの場合/etc/xdg/pdm
) - Apple File System Basicsで定義されているmacOSでは
/Library/Application Support/pdm
C:\ProgramData\pdm\pdm
(WindowsではKnown foldersで定義)
-g/--global
オプションを使用すると、最初の項目は<CONFIG_ROOT>/global-project/pdm.toml
に置き換えられます。
使用可能なすべての設定項目は、Configuration Pageにあります。
Configure the Python finder#
デフォルトでは、PDMは次のソースからPythonインタプリタを検索します。:
venv
: PDM virtualenvの場所path
:PATH
環境変数pyenv
: Thepyenvのインストールルートrye
: ryeのtoolchainのインストールルートasdf
: asdfpythonのインストールルートwinreg
:Windowsレジストリ
python.providers
config keyを設定することで、それらのいくつかを選択解除したり、順序を変更したりできます。:
1 2 |
|
Allow prereleases in resolution result#
デフォルトでは、pdm
の依存性リゾルバは、依存性の指定されたバージョン範囲に対して安定したバージョンがない場合を除き、プレリリースを無視します。この動作は、[tool.pdm.resolution]
テーブルでallow-prereleases
をtrue
に設定することで変更できます。:
1 2 |
|
Configure the package indexes#
PDMにパッケージの場所を指定するには、pyproject.toml
でソースを指定するか、pypi.*
設定を使用します。
pyproject.toml
にソースを追加します:
1 2 3 4 |
|
pdm config
でデフォルトのインデックスを変更します。:
1 |
|
pdm config
でインデックスを追加します。:
1 |
|
使用可能な構成オプションは次のとおりです。
url
:インデックスのURLverify_ssl
:(オプション)SSL証明書を検証するかどうか。デフォルトはtrueですusername
:(オプション)インデックスのユーザ名password
:(オプション)インデックスのパスワードtype
:(オプション)indexまたはfind_links。デフォルトはindexです
About the source types
デフォルトでは、すべてのソースはpipの--index-url
や--extra-index-url
のようなPEP 503スタイルの"インデックス"ですが、タイプを直接検索するファイルやリンクを含むfind_links
に設定することもできます。2つのタイプの違いについては、this answerを参照してください。
たとえば、ローカルディレクトリをソースとして使用するには、次のように指定します。:
1 2 3 4 |
|
これらの設定を次の順序で読み込んで、最終的な送信元リストを作成します。:
pypi.url
(pypi
がpyproject.toml
のどのソースのname
フィールドにも現れない場合)pyproject.toml
内のソース- PDM構成の
pypi.<name>.url
pypi.ignore_stored_index
をtrue
に設定すると、PDM構成からのすべての追加インデックスを無効にし、pyproject.toml
で指定されたインデックスのみを使用できます。
Disable the default PyPI index
デフォルトのPyPIインデックスを省略したい場合は、ソース名をPyPI
に設定するだけで、そのソースがそれを置き換えます。
1 2 3 4 |
|
Indexes in pyproject.toml
or config
プロジェクトを使用する他の人とインデックスを共有したい場合は、pyproject.toml
に追加する必要があります。
例えば、一部のパッケージはプライベートインデックスにしか存在せず、誰かがインデックスを設定しなければインストールできません。
そうでなければ、他の人には見えないローカル設定に保存してください。
Respect the order of the sources#
デフォルトでは、すべてのソースが同等と見なされ、それらのパッケージはバージョンとwheelタグでソートされ、最も高いバージョンと最も一致するものが選択されます。
場合によっては、優先ソースからパッケージを戻し、前のソースから欠落している他のパッケージを検索する必要があります。PDMは、構成respect-source-order
を読み取ることでこれをサポートします。次に例を示します。
1 2 3 4 5 6 7 8 9 10 |
|
パッケージは最初にprivate
インデックスから検索され、一致するバージョンが見つからない場合にのみpypi
インデックスから検索されます。
Specify index for individual packages#
tool.pdm.source
テーブルのinclude_packages
およびexclude_packages
configを使用して、パッケージを特定のソースにバインドできます。
1 2 3 4 5 |
|
上記の設定では、foo
またはfoo-*
に一致するパッケージはprivate
インデックスからのみ検索され、bar-*
に一致するパッケージはprivate
を除くすべてのインデックスから検索されます。
include_packages
とexclude_packages
はどちらもオプションであり、globパターンのリストを受け入れます。include_packages
はパターンが一致した場合にのみ有効になります。
Store credentials with the index#
${ENV_VAR}
変数展開を使用してURLに資格情報を指定できます。これらの変数は環境変数から読み込まれます。
1 2 3 |
|
Configure HTTPS certificates#
HTTPS要求には、カスタムCAバンドルまたはクライアント証明書を使用できます。これは、インデックス(パッケージのダウンロード用)とリポジトリ(アップロード用)の両方に対して設定できます。:
1 2 |
|
また、HTTPS証明書を検証するために、バンドルされた証明書の代わりにシステムトラストストアを使用することもできます。このアプローチでは、通常、追加の設定なしで企業のプロキシ証明書がサポートされます。
truststore
を使用するには、Python 3.10以降が必要で、truststore
をPDMと同じ環境にインストールする必要があります。
1 |
|
さらに、環境変数REQUESTS_CA_BUNDLE
およびCURL_CA_BUNDLE
で指定されたCA証明書も、設定されていれば使用されます。
Index configuration merging#
インデックスコンフィギュレーションは、コンフィギュレーションファイルの[[tool.pdm.source]]
テーブルまたはpypi.<name>
キーのname
フィールドとマージされます。
これにより、URLと認証情報を別々に保存して、ソースコントロールでシークレットが公開されないようにすることができます。たとえば、次のコンフィギュレーションがあるとします。:
1 2 3 |
|
次のように、configファイルにクレデンシャルを保存できます。:
1 2 |
|
PDMは、両方の場所から「プライベート」インデックスの構成を取得できます。
インデックスにユーザー名とパスワードが必要だが、環境変数や構成ファイルから見つからない場合、PDMはユーザー名とパスワードの入力を求めるプロンプトを表示します。または、keyring
がインストールされている場合は、資格ストアとして使用されます。PDMは、インストールされているパッケージまたはCLIからkeyring
を使用できます。
Central installation caches#
システム上の多くのプロジェクトでパッケージが必要な場合、各プロジェクトは独自のコピーを保持する必要がある。これは、特にデータサイエンスや機械学習プロジェクトでは、ディスク容量の無駄になる可能性がある。
PDMでは、同じホイールを中央のパッケージリポジトリにインストールし、そのインストールを別のプロジェクトにリンクすることで、_caching_installationsをサポートしています。これを有効にするには、次のコマンドを実行します。
1 |
|
コマンドに--local
オプションを追加することで、プロジェクトごとに有効にすることができます。
キャッシュは$(pdm config cache_dir)/packages
にあります。キャッシュの使用状況はpdm cache info
で確認できます。キャッシュされたインストールは自動的に管理されることに注意してください。どのプロジェクトにもリンクされていない場合は削除されます。キャッシュをディスクから手動で削除すると、システム上のいくつかのプロジェクトが壊れる可能性があります。
さらに、いくつかの異なるリンク方法がサポートされています。
symlink
(デフォルト)、パッケージファイルへのシンボリックリンクの作成hardlink
、キャッシュエントリのパッケージファイルへのハードリンクの作成
pdm config [--local] install.cache_method <method>
を実行して、これらを切り替えることができます。
Note
キャッシュできるのは、いずれかのパッケージソースからインストールされたパッケージだけです。
Configure the repositories for upload#
pdm publish
コマンドを使用すると、globalconfigファイル(<CONFIG_ROOT>/config.toml
)からリポジトリシークレットが読み込まれます。configの内容は次のとおりです。:
1 2 3 4 5 6 7 8 9 |
|
または、次の認証情報をenv変数で指定することもできます。:
1 2 3 4 |
|
PEMエンコードされた認証局バンドル(ca_certs
)は、サーバ証明書が標準のcertifiCAバンドルによって署名されていないローカル/カスタムPyPIリポジトリに使用できます。
Note
リポジトリは前のセクションのインデックスとは異なります。リポジトリは公開用であり、インデックスはロックと解決用です。リポジトリとインデックスは構成を共有しません。
Tip
pypi
およびtestpypi
リポジトリにurl
を設定する必要はありません。デフォルト値が入力されます。
ユーザー名、パスワード、および認証局バンドルは、それぞれ--username
、--password
、--ca-certs
を介してpdm publish
のコマンドラインから渡すことができます。
リポジトリの設定をコマンドラインから変更するには、pdm config
コマンドを使用します。
1 2 3 4 5 |
|
Password management with keyring#
キーリングが使用可能でサポートされている場合、パスワードは設定ファイルに書き込まれるのではなく、キーリングに保存され、キーリングから取得されます。これは、インデックスとアップロードリポジトリの両方をサポートします。サービス名は、インデックスの場合はpdm-pypi-<name>
になり、リポジトリの場合はpdm-repository-<name>
になります。
キーリングを有効にするには、keyring
をPDMと同じ環境にインストールするか、グローバルにインストールします。PDM環境にキーリングを追加するには、次の手順に従います。:
1 |
|
または、キーリングのコピーをグローバルにインストールした場合は、PDMで検出できるように、CLIがPATH
env varに公開されていることを確認します。:
1 |
|
Password management with keyring for Azure Artifacts#
Azureアーティファクトに対して認証を試みる場合、これは認証にADグループを使用することで実現できる:pdm self add keyring artifacts-keyring
artifacts-keyringが認証に使用されることを保証する。
次に、アーティファクトのURLをpyproject.toml
に追加します。
1 2 3 |
|
Exclude specific packages and their dependencies from the lock file#
Added in version 2.12.0
特定のパッケージをロックされたファイルに含めたくない場合もあります。これは、それらがどのコードでも使用されないことが確実であるためです。この場合、依存関係の解決中に、それらとそれらの依存関係を完全にスキップできます。
1 2 |
|
この設定では、requests
はロックファイル内でロックされず、urllib3
やidna
などの依存関係も、他のパッケージに依存していなければ解決結果に表示されません。インストーラもそれらを取得できません。
Passing constant arguments to every pdm invocation#
Added in version 2.7.0
tool.pdm.options
構成によって、個々のpdmコマンドに渡す追加オプションを追加できます。
1 2 3 4 |
|
pdm add requests
is equivalent to pdm add --no-isolation --no-self requests
.
これらのオプションは、コマンド名の直後に追加されます。たとえば、上記の設定に基づくと、pdm add requests
はpdm add --no-isolation --no-self requests
と同じです。
Ignore package warnings#
Added in version 2.10.0
依存関係を解決するときに、次のような警告が表示されることがあります。:
1 2 3 4 5 |
|
これは、パッケージのサポートされているPythonバージョンの範囲が、pyproject.toml
で指定されたrequires-python
値をカバーしていないためです。
次の設定を追加することで、パッケージごとにこれらの警告を無視できます。:
1 2 |
|
各項目は、パッケージ名と一致するglobパターンで、大文字と小文字は区別されません。