pipenvからPDMに乗り換え

Linux

はじめに

pipenvからpdmに乗り換えました。
useするだけで仮想環境を触れるので、activate、deactivateで仮想環境に出入りする用途は限られるかもしれません。
また、venv.backendはPEP標準のvenvを使いました。

仮想環境を管理する場所をプロジェクトのディレクトリにするか、またはホームディレクトリにするかを選べます。
これもコマンドで管理できるので大変便利です。

GitHub - pdm-project/pdm: A modern Python package and dependency manager supporting the latest PEP standards
A modern Python package and dependency manager supporting the latest PEP standards - pdm-project/pdm

環境

- Debian Linux bookworm
- PDM, version 2.22.0

pdmのインストール

curl -sSL https://pdm-project.org/install-pdm.py | python3 -

インストール先は以下となります。

$HOME/.local

~/.bashrcにパスを追記します。

export PATH=/home/hoge/.local/bin:$PATH

反映させます。

source ~/.bashrc

または

. ~/.bashrc

インストールキャッシュ機能を有効にします。

pdm config --global install.cache True

pdm config -l

チームで利用する場合、プロジェクトのディレクトリ内 (.venv/) に仮想環境を配置して、プロジェクトの独立性を保つ方が良いとされています。
ただ、個人で利用する場合、ホームディレクトリ (~/.venvs) に仮想環境を一元管理するのが一般的なので、プロジェクトのディレクトリに作らないようにします。

pdm config venv.in_project False

デフォルトは「~/.local」に作成されますが、pipenvと同じにするために「~/.venvs」に作成します。

pdm config venv.location ~/.venvs

設定を確認します。
~/.config/pdmに設定ファイルがあります。

pdm config -l

.gitignoreへの追加

.pdm.toml
.pdm-python
__pypackages__

pdmのアップデート

pdm self update

Pythonのインストール

Pythonのバージョンを管理するためにpyenvをインストールします。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

~/.bashrc、または~/.profileの最終行に環境変数を追記します。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

反映させます。

source ~/.bashrc

または

. ~/.bashrc

pyenvをアップデートするためのモジュールをインストールします。

git clone https://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update

pyenvで新しいバージョンのPythonを扱うにはアップデートが必要です。

pyenv update

必要ならpyenv-virtualenvをインストールします。

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

仮想環境の作成

pyenvでインストール可能なPythonのリスト表示して、最新バージョンをインストールします。

pyenv install -l | grep '^  3\.[0-9]*\.[0-9]'
pyenv install 3.13.1
pyenv versions

「3.13.1」がインストールされたことを確認します。

* system (set by /home/hoge/.pyenv/version)
  3.13.1

プロジェクトのディレクトリに移動します。
プロジェクトを初期化してpyproject.tomlを作成します。

cd <<project directory>>

pdm init

インストール済みのPythonが表示されるので選択します。
今回は、

Creating a pyproject.toml for PDM...
Please enter the Python interpreter to use
 0. cpython@3.11 (/home/hoge/.pyenv/shims/python3)
 1. cpython@3.13 (/home/hoge/.pyenv/versions/3.13.1/bin/python3.13)
 2. cpython@3.11 (/usr/bin/python3.11)
 3. cpython@3.11 (/usr/bin/python3)
Please select (0): 1

Virtualenv is created successfully at /project/.venv
Project name (project_name):
Project version (0.1.0):
Do you want to build this project for distribution(such as wheel)?
If yes, it will be installed by default when running `pdm install`. [y/n] (n):
License(SPDX name) (MIT):
Author name (): hogehoge
Author email (): hoge@xxx.xx.xx
Python requires('*' to allow any) (==3.13.*):
Project is initialized successfully
Found following files from other formats that you may import:
0. /project/Pipfile (pipfile)
1. don't do anything, I will import later.
Please select: 0
Changes are written to pyproject.toml.

環境の状態を表示します。

pdm info

作成した仮想環境(プロジェクト)を作成します。
「3.13.1」はPythonのバージョン番号。

pdm venv create --name <<project_name>> 3.13.1

作成した仮想環境(プロジェクト)を切り替えます。
プロジェクト内でのPDMの動作に対して、特定のPythonバージョンまたは仮想環境を使えるようにします。
bashなどのシェルに影響を与えないので、コマンドはシステムのPython環境が優先されます。

pdm use --venv <<project_name>>

必要なパッケージをインストールします。

pdm add Django
pdm add uwsgi

切り替えた仮想環境にインストールされているか確認します。

ls -la /home/hoge/.venvs/<<project_name>>/bin

インストールしたパッケージを確認します。

pdm list

仮想環境のアクティベート

仮想環境をアクティベートして、bashなどのシェルで仮想環境を使えるようにします。

source ~/.venvs/<<project_name>>/bin/activate

仮想環境のデアクティベート

アクティベートした仮想環境から抜けます。

deactivate

仮想環境の削除

指定した仮想環境を削除します。

pdm venv remove <<project_name>>

仮想環境の一覧

指定した仮想環境を削除します。

pdm venv list

その他

指定されたパッケージを削除します。

pdm remove --venv <<project_name>>

指定されたパッケージをアップデートします。

pdm update requests

Install dependencies from lock file.

pdm install

Update package(s) in pyproject.toml.

pdm update

Synchronize the current working set with lock file.

pdm sync

Show the package information.

pdm -v show django

runを使うと、有効にした仮想環境でscriptが実行できます。

pdm run

pdm run python -V

pdm run which python

pdm run python manage.py runserver 192.168.10.5:88

Comments