PEP 582 を使用する#
PEP 582 は拒否されました
これは拒否された PEP です。しかし、この機能が PDM の誕生の理由であるため、PDM はサポートを維持します。 代わりに 仮想環境 を使用することをお勧めします。
PEP 582 を使用すると、依存関係はプロジェクトルートの __pypackages__
ディレクトリにインストールされます。PEP 582 をグローバルに有効にする と、プロジェクトインタープリターを使用してスクリプトを直接実行することもできます。
プロジェクトインタープリターが通常の Python の場合、このモードが有効になります。
さらに、マシン上で初めて作業するプロジェクトに空の __pypackages__
ディレクトリが含まれている場合、PEP 582 が自動的に有効になり、仮想環境は作成されません。
pdm で管理されているプロジェクトで PEP 582 を有効にする#
pdm が仮想環境の代わりに PEP 582 を使用するようにするには、python.use_venv
構成変数を False に設定します:
1 |
|
PEP 582 をグローバルに有効にする#
Python インタープリターが PEP 582 パッケージを認識するようにするには、
pdm/pep582/sitecustomize.py
を Python ライブラリ検索パスに追加する必要があります。
pdm --pep582
を実行するだけで、環境変数が自動的に変更されます。効果を発揮するには、ターミナルセッションを再起動することを忘れないでください。
環境変数を変更するコマンドは pdm --pep582 [<SHELL>]
で表示できます。
<SHELL>
が指定されていない場合、PDM はいくつかの推測に基づいて選択します。
eval "$(pdm --pep582)"
を実行してコマンドを実行できます。
ログイン時に有効にするために .bash_profile
(または同様のプロファイル)に行を追加することをお勧めします。
たとえば、bash では次のようにします:
1 |
|
再度、効果を発揮するには、ターミナルセッションを再起動することを忘れないでください。
どのように行われますか?
Python の起動時に サイトパッケージの読み込み のおかげで、sys.path
をパッチすることが可能です。
PDM に同梱されている sitecustomize.py
を実行することで、インタープリターは最も近い __pypackage__
フォルダーを検索し、それを sys.path
変数に追加できます。
IDE を構成して PEP 582 をサポートする#
現在、ほとんどの IDE には PEP 582 の組み込みサポートやプラグインがないため、ツールを手動で構成する必要があります。
PyCharm#
__pypackages__/<major.minor>/lib
を ソースルート としてマークします。
次に、Python インタープリター として同じ <major.minor>
バージョンの Python インストールを選択します。
さらに、環境からツール(例: pytest
)を使用したい場合は、対応する実行/デバッグ構成の PATH
変数に
__pypackages__/<major.minor>/bin
ディレクトリを追加する必要があります。
VSCode#
.vscode/settings.json
のトップレベルの dict に次の 2 つのエントリを追加します:
1 2 3 4 |
|
このファイルは、プラグイン pdm-vscode
で自動生成できます。
PEP582 をグローバルに有効にする、 そして、VSCode が PEP582 を有効にしたユーザーとシェルを使用して実行されていることを確認してください。
PEP582 をグローバルに有効にできませんか?
何らかの理由で PEP582 をグローバルに有効にできない場合でも、各プロジェクトでそれぞれの "launch" を構成できます:
PYTHONPATH
環境変数を .vscode/launch.json
の起動構成に設定します。
たとえば、pytest
の実行をデバッグするには次のようにします:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
パッケージが src
ディレクトリにある場合は、それも PYTHONPATH
に追加します:
1 |
|
Pylance/Pyright を使用していますか?
"python.analysis.diagnosticMode": "workspace"
を構成していて、
その結果として大量のエラー/警告が表示される場合。
ワークスペースディレクトリに pyrightconfig.json
を作成し、次のフィールドを入力する必要があります:
1 2 3 |
|
その後、言語サーバーまたは VS Code を再起動すれば完了です。 将来的には (microsoft/pylance-release#1150)、問題が解決されるかもしれません。
Jupyter Notebook を使用していますか?
pdm を使用して jupyter notebook をインストールし、python 拡張機能と一緒に vscode で使用したい場合:
pdm add notebook
などを使用して notebook をインストールします- プロジェクトディレクトリ内に次のような内容の
.env
ファイルを追加します:
1 |
|
上記がまだ機能しない場合は、Notebook の起動時に環境変数が正しく読み込まれていない可能性があります。次の 2 つの回避策があります。
- ターミナルで
code .
を実行します。これにより、パスが正しく設定された状態で現在のディレクトリに新しい VSCode ウィンドウが開きます。新しいウィンドウで Jupyter Notebook を使用します - 新しいウィンドウを開きたくない場合は、Jupyter Notebook の冒頭で次のようにパスを明示的に設定します:
1 2 |
|
PDM タスクプロバイダー
さらに、VSCode タスクプロバイダー拡張機能 がダウンロード可能です。
これにより、VSCode が pdm スクリプト を自動的に検出し、 VSCode タスク としてネイティブに実行できるようになります。
Neovim#
neovim-lsp を使用していて
pyright を使用しており、__pypackages__
ディレクトリをパスに追加したい場合は、
プロジェクトの pyproject.toml
に次のように追加できます。
1 2 |
|
Emacs#
いくつかのオプションがありますが、基本的には LSP クライアントに __pypackages__
を検索するパスに追加するように指示する必要があります。以下は利用可能なオプションのいくつかです:
pyproject.toml
と pyright を使用する#
プロジェクトの pyproject.toml
に次のように追加します:
1 2 |
|
eglot + pyright#
pyright と eglot(Emacs 29 に含まれています)を使用する場合、設定に次のように追加します:
1 2 3 4 5 6 7 8 9 10 |
|
pyright をグローバルにインストールするか、プロジェクトにインストールする必要があります(おそらく開発依存関係として)。次のように追加できます:
1 |
|
LSP-Mode + lsp-python-ms#
以下は、Emacs で lsp-python-ms を使用して PDM を動作させる方法を示すサンプルコードスニペットです。@linw1995 によって提供されました。
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 26 27 28 29 30 31 32 33 |
|