Working with PEP 582#
PEP 582 has been rejected
これはリジェクトされたPEPです。ただし、このフィーチャーがPDMの生成理由であるため、PDMはサポートを保持します。代わりにvirtual environmentsを使用することをお勧めします。
PEP 582を使用すると、依存関係はプロジェクトルートの下の__pypackages__
ディレクトリにインストールされます。PEP 582 enabled globallyを使用すると、プロジェクトインタプリタを使用してスクリプトを直接実行することもできます。
When the project interpreter is a normal Python, this mode is enabled.
さらに、あなたのマシンで初めて作業するプロジェクトでは、空の__pypackages__
ディレクトリが含まれている場合、PEP 582が自動的に有効になり、virtualenvは作成されません。
Enable PEP 582 globally#
PythonインタプリタにPEP 582パッケージを認識させるには、Pythonライブラリの検索パスにpdm/pep582/sitecustomize.py
を追加する必要があります。
to restart the terminal session to take effect.
pdm --pep582
を実行するだけで、環境変数が自動的に変更されます。有効にするには、ターミナルセッションを再起動することを忘れないでください。
The command to change the environment variables can be printed by pdm --pep582 [<SHELL>]
.
If <SHELL>
isn't given, PDM will pick one based on some guesses.
You can run eval "$(pdm --pep582)"
to execute the command.
You may want to write a line in your .bash_profile
(or similar profiles) to make it effective when logging in.
For example, in bash you can do this:
環境変数を変更するコマンドは、pdm --pep582 [<SHELL>]
で出力できます。<SHELL>
が指定されていない場合、PDMはいくつかの推測に基づいて1つを選択します。eval "$(pdm--pep582)"
を実行してコマンドを実行できます。
ログイン時に有効にするために、.bash_profile
(または同様のプロファイル)に行を書くことができます。例えば、bashでは次のようにすることができます。
1 |
|
もう一度、ターミナル・セッションを再起動して有効にすることを忘れないでください。
How is it done?
Thanks to the site packages loading on Python startup. It is possible to patch the sys.path
by executing the sitecustomize.py
shipped with PDM. The interpreter can search the directories
for the nearest __pypackage__
folder and append it to the sys.path
variable.
Python startupのsite packages loadingのおかげです。PDMに付属のsitecustomize.py
を実行することでsys.path
にパッチを当てることができます。インタプリタはディレクトリから最も近い__pypackage__
フォルダを検索し、それをsys.path
変数に追加することができます。
Configure IDE to support PEP 582#
現在、ほとんどのIDEにはPEP 582のサポートやプラグインが組み込まれていないため、ツールを手動で設定する必要があります。
PyCharm#
__pypackages__/<major.minor>/lib
をSources Rootとしてマークします。次に、同じ<major.minor>
バージョンのPythonインストールをPython interpreterとして選択します。
さらに、環境からのツール(例えばpytest
)を使用したい場合は、__pypackages__/<major.minor>/bin
ディレクトリを対応するrun/debug設定のPATH
変数に追加する必要があります。
VSCode#
次の2つのエントリを.vscode/settings.json
のトップレベルdictに追加します。:
1 2 3 4 |
|
このファイルは、プラグインpdm-vscode
で自動生成できます。
PEP582をグローバルに有効にする、PEP582を有効にしたのと同じユーザとシェルを使用してVSCodeが実行されていることを確認します。
Cannot enable PEP582 globally?
何らかの理由でPEP582をグローバルに有効にできない場合でも、各プロジェクトでそれぞれの"ラウンチ"を設定することができます。起動設定の.vscode/launch.json
にPYTHONPATH
環境変数を設定します。例えば、pytest
をデバッグするには次のように実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
パッケージがsrc
ディレクトリにある場合は、PYTHONPATH
にも追加します。
1 |
|
Using Pylance/Pyright?
"python.analysis.diagnosticMode":"workspace"
を設定していて、結果として大量のエラー/警告が表示される場合は、ワークスペースディレクトリにpyrightconfig.json
を作成し、次のフィールドに入力する必要があります。
1 2 3 |
|
その後、言語サーバまたはVS Codeを再起動すれば、準備は完了です。将来的には(microsoft/pylance-release#1150)、問題は解決されるかもしれません。
Using Jupyter Notebook?
pdmを使用してjupyter notebookをインストールし、vscodeでpython拡張機能とともに使用する場合は、次のようになります。:
pdm add notebook
またはsoを使用してnotebookをインストールします。- 次のような内容の
.env
ファイルをプロジェクトディレクトリ内に追加します。
1 |
|
上記がまだ動作しない場合は、ノートブックの起動時に環境変数が正しくロードされていない可能性があります。2つの回避策があります。
- ターミナルで
code.
を実行します。パスが正しく設定された現在のディレクトリに新しいVSCodeウィンドウが開きます。新しいウィンドウでJupyter Notebookを使用します。 - 新しいウィンドウを開かない場合は、Jupyter Notebookの先頭で次のコマンドを実行して、パスを明示的に設定します。
1 2 |
|
PDM Task Provider
さらに、VSCode Task Provider extensionをダウンロードできます。
これにより、VSCodeはpdm scriptsを自動的に検出し、VSCode Tasksとしてネイティブに実行できるようになります。
Neovim#
pyrightでneovim-lspを使用して、__pypackages__
ディレクトリをパスに追加したい場合は、これをプロジェクトのpyproject.toml
に追加できます。
1 2 |
|
Emacs#
いくつかのオプションがありますが、基本的には、LSPクライアントが参照するパスに__pypackages__
を追加するように指示する必要があります。以下に、使用可能なオプションをいくつか示します。:
Using pyproject.toml
and pyright#
これをプロジェクトのpyproject.toml
に追加します。:
1 2 |
|
eglot + pyright#
pyrightとeglot(Emacs 29に含まれています)を使って、以下を設定に追加します。:
1 2 3 4 5 6 7 8 9 10 |
|
pyrightはグローバルにインストールすることも、プロジェクト内に(おそらくdev依存関係として)インストールすることもできます。たとえば、次のように追加できます。
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 |
|