Working with Virtual Environments#
pdm init
コマンドを実行すると、PDMはプロジェクト内でask for the Python interpreter to useします。これは、依存関係をインストールしてタスクを実行するためのベースインタプリタです。
PEP 582と比較すると、仮想環境はより成熟していると考えられ、IDEだけでなくPythonエコシステムでもよりよくサポートされています。したがって、特に設定されていない場合は、virtualenvがデフォルトモードになります。
プロジェクトインタプリタ(.pdm-python
に保存され、pdm info
で確認できるインタプリタ)がvirtualenvからのものである場合、仮想環境が使用されます。
Virtualenv auto-creation#
デフォルトでは、PDMは他のパッケージマネージャと同様にvirtualenvレイアウトの使用を優先します。Pythonインタプリタがまだ決定されていない新しいPDM管理プロジェクトでpdm install
を初めて実行すると、PDMは<project_root>/.venv
にvirtualenvを作成し、そこに依存関係をインストールします。pdm init
の対話型セッションでは、PDMはvirtualenvの作成も要求します。
PDMがvirtualenvの作成に使用するバックエンドを選択できます。現在、次の3つのバックエンドがサポートされています。:
virtualenv
(default)venv
conda
これはpdm config venv.backend [virtualenv|venv|conda]
で変更できます。
Added in version 2.13.0
さらに、python.use_venv
configがtrue
に設定されている場合、PDMはpdm use
を使用してPythonインタプリタを切り替えるときに、常にvirtualenvの作成を試みます。
Create a virtualenv yourself#
任意のPythonバージョンで複数のvirtualenvを作成できます。
1 2 3 4 5 6 |
|
The location of virtualenvs#
If no --name
is given, PDM will create the venv in <project_root>/.venv
. Otherwise, virtualenvs go to the location specified by the venv.location
configuration.
They are named as <project_name>-<path_hash>-<name_or_python_version>
to avoid name collision.
You can disable the in-project virtualenv creation by pdm config venv.in_project false
. And all virtualenvs will be created under venv.location
.
--name
が指定されていない場合、PDMは<project_root>/.venv
にvenvを作成します。それ以外の場合、virtualenvはvenv.location
設定で指定された場所に移動します。名前の衝突を避けるために、それらは<project_name>-<path_hash>-<name_or_python_version>
として名前が付けられます。pdm config venv.in_project false
を使用して、プロジェクト内のvirtualenvの作成を無効にできます。すべてのvirtualenvはvenv.location
の下に作成されます。
Reuse the virtualenv you created elsewhere#
pdm use
を使用して、前の手順で作成したvirtualenvを使用するようにPDMに指示できます。
1 |
|
Virtualenv auto-detection#
インタプリタがプロジェクト構成に保存されていない場合、またはPDM_IGNORE_SAVED_PYTHON
env varが設定されている場合、PDMは使用可能なvirtualenvの検出を試みます。:
- プロジェクトルートの
venv
、env
、.venv
ディレクトリ PDM_IGNORE_ACTIVE_VENV
が設定されていない限り、現在アクティブ化されているvirtualenv
List all virtualenvs created with this project#
1 2 3 4 5 6 |
|
Show the path or python interpreter of a virtualenv#
1 2 |
|
Remove a virtualenv#
1 2 3 4 |
|
Activate a virtualenv#
pipenv
やpoetry
のようにサブシェルを生成する代わりに、pdm venv
はシェルを作成せず、コンソールにactivateコマンドを出力します。このようにして、現在のシェルを離れることはありません。出力をeval
に渡して、virtualenvをアクティブにすることができます。:
1 2 |
|
1 |
|
1 |
|
また、プロジェクトインタプリタがvenv Pythonの場合は、activateの後のname引数を省略できます。
Note
venv activate
は、プロジェクトで使用されるPythonインタプリタを切り替えません。virtualenvパスを環境変数に注入することによってシェルを変更するだけです。前述の目的のためには、pdm use
コマンドを使用してください。
CLIの使用方法の詳細については、pdm venv
のドキュメントを参照してください。
Looking for pdm shell
?
PDMにはshell
コマンドが用意されていません。これは、多くの高度なシェル機能がサブシェルで完全に動作しない可能性があり、すべてのコーナーケースをサポートするためのメンテナンスの負担が発生するためです。ただし、次の方法で機能を追加することもできます。
-pdm run$SHELL
を使用します。これにより、環境変数が正しく設定されたサブシェルが生成されます。サブシェルはexit
またはCtrl+D
で終了できます。
-virtualenvを有効にするシェル関数を追加します。ZSHでも動作するBASH関数の例を次に示します。
1 2 3 4 5 6 7 8 9 |
|
この関数をコピーして~/.bashrc
ファイルに貼り付け、シェルを再起動してください。
fish
シェルでは、以下を~/fish/config.fish
または~/.config/fish/config.fish
に入れることができます。
1 2 3 4 5 6 7 8 9 |
|
これでpdm shell
を実行してvirtualenvをアクティブにできます。
virtualenvは通常どおりdeactivate
コマンドで非アクティブにできます。
Prompt customization#
デフォルトでは、virtualenvを有効にすると、{project_name}-{python_version}
というプロンプトが表示されます。
たとえば、プロジェクト名がtest-project
の場合は、次のようになります。:
1 2 |
|
フォーマットは、virtualenvの作成前に、venv.prompt
構成またはPDM_VENV_PROMPT
環境変数(pdm init
またはpdm venv create
の前)を使用してカスタマイズできます。
使用可能な変数は次のとおりです。:
project_name
:プロジェクトの名前python_version
:Pythonのバージョン(virtualenvによって使用されます)
1 2 3 |
|
Run a command in a virtual environment without activating it#
1 2 3 4 5 6 |
|
--venv
フラグまたはPDM_IN_VENV
環境変数をサポートするコマンドは他にもあります。CLI referenceを参照してください。この機能を使用する前に、pdm venv create --name <name>
でvirtualenvを作成する必要があります。
Switch to a virtualenv as the project environment#
デフォルトでは、pdm use
を使用してvenv以外のPythonを選択すると、プロジェクトはpep 582 modeに切り替えられます。また、--venv
フラグを使用して、名前付きの仮想環境に切り替えることもできます。:
1 2 3 4 |
|
Disable virtualenv mode#
pdm config python.use_venv false
を使用して、virtualenvの自動作成と自動検出を無効にすることができます。
venvを無効にすると、選択したインタプリタがvirtualenvからのものであっても、常にPEP 582モードが使用されます。
Including pip in your virtual environment#
デフォルトでは、PDMは仮想環境にpip
を含めません。
これにより、依存関係のみが仮想環境に確実にインストールされ、分離が強化されます。
pip
を一度インストールするには(たとえば、CIに任意の依存関係をインストールしたい場合)、次のコマンドを実行します。
1 2 3 4 5 |
|
または、--with-pip
で仮想環境を作成することもできます。
1 |
|
See the ensurepip docs for more details on ensurepip
.
ensurepip
の詳細については、ensurepip docsを参照してください。
仮想環境にpip
を含めるようにPDMを永続的に設定する場合は、venv.with_pip
設定を使用できます。