Skip to content

Configure the Project#

PDMのconfigコマンドはgit configと同じように動作しますが、--listは構成を表示するのに必要ありません。

現在の設定を表示します。

1
pdm config

設定を1つ取得します。:

1
pdm config pypi.url

構成値を変更し、ホーム構成に保管します。:

1
pdm config pypi.url "https://test.pypi.org/simple"

デフォルトでは、設定はグローバルに変更されます。このプロジェクトでのみ表示される設定にしたい場合は、--localフラグを追加します。:

1
pdm config --local pypi.url "https://test.pypi.org/simple"

ローカル構成はすべて、プロジェクトのルートディレクトリの下のpdm.tomlに保存されます。

Configuration files#

構成ファイルは次の順序で検索されます。

  1. <PROJECT_ROOT>/pdm.toml - プロジェクト構成
  2. <CONFIG_ROOT>/config.toml - ホーム構成
  3. <SITE_CONFIG_ROOT>/config.toml - サイト構成

ここで<CONFIG_ROOT>は以下のようになります:

<SITE_CONFIG_ROOT>は次のようになります。:

-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.providersconfig keyを設定することで、それらのいくつかを選択解除したり、順序を変更したりできます。:

1
2
pdm config python.providers rye   # Rye source only
pdm config python.providers pyenv,asdf  # pyenv and asdf

Allow prereleases in resolution result#

デフォルトでは、pdmの依存性リゾルバは、依存性の指定されたバージョン範囲に対して安定したバージョンがない場合を除き、プレリリースを無視します。この動作は、[tool.pdm.resolution]テーブルでallow-prereleasestrueに設定することで変更できます。:

1
2
[tool.pdm.resolution]
allow-prereleases = true

Configure the package indexes#

PDMにパッケージの場所を指定するには、pyproject.tomlでソースを指定するか、pypi.*設定を使用します。

pyproject.tomlにソースを追加します:

1
2
3
4
[[tool.pdm.source]]
name = "private"
url = "https://private.pypi.org/simple"
verify_ssl = true

pdm configでデフォルトのインデックスを変更します。:

1
pdm config pypi.url "https://test.pypi.org/simple"

pdm configでインデックスを追加します。:

1
pdm config pypi.extra.url "https://extra.pypi.org/simple"

使用可能な構成オプションは次のとおりです。

  • url:インデックスのURL
  • verify_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
[[tool.pdm.source]]
name = "local"
url = "file:///${PROJECT_ROOT}/packages"
type = "find_links"

これらの設定を次の順序で読み込んで、最終的な送信元リストを作成します。:

  • pypi.url(pypipyproject.tomlのどのソースのnameフィールドにも現れない場合)
  • pyproject.toml内のソース
  • PDM構成のpypi.<name>.url

pypi.ignore_stored_indextrueに設定すると、PDM構成からのすべての追加インデックスを無効にし、pyproject.tomlで指定されたインデックスのみを使用できます。

Disable the default PyPI index

デフォルトのPyPIインデックスを省略したい場合は、ソース名をPyPIに設定するだけで、そのソースがそれを置き換えます。

1
2
3
4
[[tool.pdm.source]]
url = "https://private.pypi.org/simple"
verify_ssl = true
name = "pypi"
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
[tool.pdm.resolution]
respect-source-order = true

[[tool.pdm.source]]
name = "private"
url = "https://private.pypi.org/simple"

[[tool.pdm.source]]
name = "pypi"
url = "https://pypi.org/simple"

パッケージは最初にprivateインデックスから検索され、一致するバージョンが見つからない場合にのみpypiインデックスから検索されます。

Specify index for individual packages#

tool.pdm.sourceテーブルのinclude_packagesおよびexclude_packagesconfigを使用して、パッケージを特定のソースにバインドできます。

1
2
3
4
5
[[tool.pdm.source]]
name = "private"
url = "https://private.pypi.org/simple"
include_packages = ["foo", "foo-*"]
exclude_packages = ["bar-*"]

上記の設定では、fooまたはfoo-*に一致するパッケージはprivateインデックスからのみ検索され、bar-*に一致するパッケージはprivateを除くすべてのインデックスから検索されます。

include_packagesexclude_packagesはどちらもオプションであり、globパターンのリストを受け入れます。include_packagesはパターンが一致した場合にのみ有効になります。

Store credentials with the index#

${ENV_VAR}変数展開を使用してURLに資格情報を指定できます。これらの変数は環境変数から読み込まれます。

1
2
3
[[tool.pdm.source]]
name = "private"
url = "https://${PRIVATE_PYPI_USERNAME}:${PRIVATE_PYPI_PASSWORD}@private.pypi.org/simple"

Configure HTTPS certificates#

HTTPS要求には、カスタムCAバンドルまたはクライアント証明書を使用できます。これは、インデックス(パッケージのダウンロード用)とリポジトリ(アップロード用)の両方に対して設定できます。:

1
2
pdm config pypi.ca_certs /path/to/ca_bundle.pem
pdm config repository.pypi.ca_certs /path/to/ca_bundle.pem

また、HTTPS証明書を検証するために、バンドルされた証明書の代わりにシステムトラストストアを使用することもできます。このアプローチでは、通常、追加の設定なしで企業のプロキシ証明書がサポートされます。

truststoreを使用するには、Python 3.10以降が必要で、truststoreをPDMと同じ環境にインストールする必要があります。

1
pdm self add truststore

さらに、環境変数REQUESTS_CA_BUNDLEおよびCURL_CA_BUNDLEで指定されたCA証明書も、設定されていれば使用されます。

Index configuration merging#

インデックスコンフィギュレーションは、コンフィギュレーションファイルの[[tool.pdm.source]]テーブルまたはpypi.<name>キーのnameフィールドとマージされます。 これにより、URLと認証情報を別々に保存して、ソースコントロールでシークレットが公開されないようにすることができます。たとえば、次のコンフィギュレーションがあるとします。:

1
2
3
[[tool.pdm.source]]
name = "private"
url = "https://private.pypi.org/simple"

次のように、configファイルにクレデンシャルを保存できます。:

1
2
pdm config pypi.private.username "foo"
pdm config pypi.private.password "bar"

PDMは、両方の場所から「プライベート」インデックスの構成を取得できます。

インデックスにユーザー名とパスワードが必要だが、環境変数や構成ファイルから見つからない場合、PDMはユーザー名とパスワードの入力を求めるプロンプトを表示します。または、keyringがインストールされている場合は、資格ストアとして使用されます。PDMは、インストールされているパッケージまたはCLIからkeyringを使用できます。

Central installation caches#

システム上の多くのプロジェクトでパッケージが必要な場合、各プロジェクトは独自のコピーを保持する必要がある。これは、特にデータサイエンスや機械学習プロジェクトでは、ディスク容量の無駄になる可能性がある。

PDMでは、同じホイールを中央のパッケージリポジトリにインストールし、そのインストールを別のプロジェクトにリンクすることで、_caching_installationsをサポートしています。これを有効にするには、次のコマンドを実行します。

1
pdm config install.cache on

コマンドに--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
[repository.pypi]
username = "frostming"
password = "<secret>"

[repository.company]
url = "https://pypi.company.org/legacy/"
username = "frostming"
password = "<secret>"
ca_certs = "/path/to/custom-cacerts.pem"

または、次の認証情報をenv変数で指定することもできます。:

1
2
3
4
export PDM_PUBLISH_REPO=...
export PDM_PUBLISH_USERNAME=...
export PDM_PUBLISH_PASSWORD=...
export PDM_PUBLISH_CA_CERTS=...

PEMエンコードされた認証局バンドル(ca_certs)は、サーバ証明書が標準のcertifiCAバンドルによって署名されていないローカル/カスタムPyPIリポジトリに使用できます。

Note

リポジトリは前のセクションのインデックスとは異なります。リポジトリは公開用であり、インデックスはロックと解決用です。リポジトリとインデックスは構成を共有しません。

Tip

pypiおよびtestpypiリポジトリにurlを設定する必要はありません。デフォルト値が入力されます。 ユーザー名、パスワード、および認証局バンドルは、それぞれ--username--password--ca-certsを介してpdm publishのコマンドラインから渡すことができます。

リポジトリの設定をコマンドラインから変更するには、pdm configコマンドを使用します。

1
2
3
4
5
pdm config repository.pypi.username "__token__"
pdm config repository.pypi.password "my-pypi-token"

pdm config repository.company.url "https://pypi.company.org/legacy/"
pdm config repository.company.ca_certs "/path/to/custom-cacerts.pem"

Password management with keyring#

キーリングが使用可能でサポートされている場合、パスワードは設定ファイルに書き込まれるのではなく、キーリングに保存され、キーリングから取得されます。これは、インデックスとアップロードリポジトリの両方をサポートします。サービス名は、インデックスの場合はpdm-pypi-<name>になり、リポジトリの場合はpdm-repository-<name>になります。

キーリングを有効にするには、keyringをPDMと同じ環境にインストールするか、グローバルにインストールします。PDM環境にキーリングを追加するには、次の手順に従います。:

1
pdm self add keyring

または、キーリングのコピーをグローバルにインストールした場合は、PDMで検出できるように、CLIがPATHenv varに公開されていることを確認します。:

1
export PATH=$PATH:path/to/keyring/bin

Password management with keyring for Azure Artifacts#

Azureアーティファクトに対して認証を試みる場合、これは認証にADグループを使用することで実現できる:pdm self add keyring artifacts-keyringartifacts-keyringが認証に使用されることを保証する。

次に、アーティファクトのURLをpyproject.tomlに追加します。

1
2
3
[[tool.pdm.source]]
name = "NameOfFeed"
url = "https://pkgs.dev.azure.com/[org name]/_packaging/[feed name]/pypi/simple/"

Exclude specific packages and their dependencies from the lock file#

Added in version 2.12.0

特定のパッケージをロックされたファイルに含めたくない場合もあります。これは、それらがどのコードでも使用されないことが確実であるためです。この場合、依存関係の解決中に、それらとそれらの依存関係を完全にスキップできます。

1
2
[tool.pdm.resolution]
excludes = ["requests"]

この設定では、requestsはロックファイル内でロックされず、urllib3idnaなどの依存関係も、他のパッケージに依存していなければ解決結果に表示されません。インストーラもそれらを取得できません。

Passing constant arguments to every pdm invocation#

Added in version 2.7.0

tool.pdm.options構成によって、個々のpdmコマンドに渡す追加オプションを追加できます。

1
2
3
4
[tool.pdm.options]
add = ["--no-isolation", "--no-self"]
install = ["--no-self"]
lock = ["--no-cross-platform"]

pdm add requests is equivalent to pdm add --no-isolation --no-self requests.

これらのオプションは、コマンド名の直後に追加されます。たとえば、上記の設定に基づくと、pdm add requestspdm add --no-isolation --no-self requestsと同じです。

Ignore package warnings#

Added in version 2.10.0

依存関係を解決するときに、次のような警告が表示されることがあります。:

1
2
3
4
5
PackageWarning: Skipping scipy@1.10.0 because it requires Python
<3.12,>=3.8 but the project claims to work with Python>=3.9.
Narrow down the `requires-python` range to include this version. For example, ">=3.9,<3.12" should work.
  warnings.warn(record.message, PackageWarning, stacklevel=1)
Use `-q/--quiet` to suppress these warnings, or ignore them per-package with `ignore_package_warnings` config in [tool.pdm] table.

これは、パッケージのサポートされているPythonバージョンの範囲が、pyproject.tomlで指定されたrequires-python値をカバーしていないためです。 次の設定を追加することで、パッケージごとにこれらの警告を無視できます。:

1
2
[tool.pdm]
ignore_package_warnings = ["scipy", "tensorflow-*"]

各項目は、パッケージ名と一致するglobパターンで、大文字と小文字は区別されません。