Ubuntu 24.04LTS に asdf + uv + direnv で Python 環境を構築する
以前に以下のメモを書きました。
- Ubuntu 24.04 へ asdf をインストールして言語 / ツールのバージョンを管理する
- asdf 環境の Python に pip で追加したコマンドが使えない場合の対処
- Ubuntu 22.04.4LTS に uv を入れて Python のパッケージを管理する
2024/4/24 に Ubuntu 24.04LTS が正式リリースされましたので、改めて Ubuntu 24.04LTS に以下をインストールして Python 環境を構築する手順をメモしておきます。
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 24.04LTS |
asdf | v0.14.0-ccdd47d |
uv | 0.1.44 |
asdf のインストール¶
以下を実行することでインストール出来ます。
apt -y install curl git
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
cat << 'EOF' >> ~/.bashrc
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
EOF
source ~/.bashrc
バイナリは以下に ~/.asdf/bin/asdf
にインストールされました。
direnv のインストール¶
以下を実行することでインストール出来ます。 ログインシェルには bash を利用している前提です (その他のシェルを利用している場合は調整が必要です)。
curl -L https://github.com/direnv/direnv/releases/download/v2.34.0/direnv.linux-amd64 -o /usr/local/bin/direnv && \
chmod 755 /usr/local/bin/direnv && \
cat << 'EOF' >> ~/.bashrc
# direnv
export EDITOR=vim
eval "$(direnv hook bash)"
EOF
上記手順では curl で取得したバイナリを /usr/local/bin/direnv
に配置しています。
uv のインストール¶
以下を実行することでインストール出来ます。
curl -LsSf https://astral.sh/uv/install.sh | sh
バイナリは以下に ~/.cargo/bin/uv
にインストールされました。
asdf の Python プラグインに必要なソフトウェアをインストールする¶
asdf の Python プラグインを利用する際に必要なソフトウェアをインストールしておきます。
apt -y install \
build-essential \
curl \
libbz2-dev \
libffi-dev \
liblzma-dev \
libncursesw5-dev \
libreadline-dev \
libsqlite3-dev \
libssl-dev \
libxml2-dev \
libxmlsec1-dev \
tk-dev \
xz-utils \
zlib1g-dev
asdf で Python をインストールする¶
asdf 経由で Python をインストールするには、Python 用のプラグインをインストールします。
asdf plugin add python
インストール可能な Python バージョンの一覧を表示するには asdf list all python
を実行します。 ただ、これを実行した場合は一般的に広く利用されている CPython 以外の、以下などの様々な Python 実装からインストール可能なバージョンも表示されます。
- ActivePython
- Anaconda
- Cinder
- GraalPy
- IronPython
- Jython
- MicroPython
- Miniforge
- nogil (Python Multithreading without GIL)
- PyPy
- Pyston
- Stackless Python
「CPython 3.x 系のみ、表示する」のであれば asdf list all python | grep ^3
のように実行します。 実行例は以下の通りです。
# asdf list all python | grep ^3
3.0.1
3.1.0
3.1.1
(snip)
3.12.0
3.12-dev
3.12.1
3.12.2
3.12.3
3.13.0b1
3.13-dev
3.14-dev
asdf で Python をインストールするには asdf install python VERSION
を実行します。 下記の例では CPython 3.12.3 をインストールしています。
asdf install python 3.12.3
インストールした Python を利用出来るようにするには asdf global python VERSION
を実行します。
asdf global python 3.12.3
インストール済みの Python バージョンを確認するには以下のように実行します。
# asdf list python
*3.12.3
venv 環境を作成するスクリプト¶
プロジェクトディレクトリを作成するごとに「Python 用仮想環境を作成し」「direnv 用の設定ファイルを配置する」のは面倒ですので、この作業を簡略化するスクリプトを用意しておきます。
cat << 'EOF' > /usr/local/bin/venv
#!/bin/sh
uv venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
EOF
chmod 755 /usr/local/bin/venv
プロジェクトディレクトリへ移動した後、以下のように venv
と実行すると仮想環境を作成します。
# mkdir work
# cd work/
# venv
Using Python 3.11.9 interpreter at: /root/.asdf/installs/python/3.11.9/bin/python3
Creating virtualenv at: .venv
Activate with: source .venv/bin/activate
direnv: loading ~/work/.envrc
direnv: export +VIRTUAL_ENV +VIRTUAL_ENV_PROMPT ~PATH
uv で Python のパッケージを管理する¶
uv で Python の仮想環境やパッケージを管理する方法をメモしておきます。
仮想環境を作成する¶
uv で仮想環境を作成するには以下のように実行します。 .venv
というディレクトリが作成されます。 但し、前述の /usr/local/bin/vnev
スクリプトを利用すればこの作業も含んでいる為、敢えて手動で uv venv
を実行する必要はありません。
uv venv
パッケージをインストールする¶
uv でパッケージをインストールするには uv pip install PACKAGE
を実行します。 以下は実際に pandas をインストールする実行例です。
uv pip install pandas
インストール済みパッケージの一覧を表示する¶
uv でインストールしたパッケージの一覧を表示するには uv pip list
を実行します。
uv pip list
インストール済みパッケージから requirements.txt を作成する¶
インストール済みパッケージから requirements.txt
を作成するには uv pip freeze | uv pip compile - -o requirements.txt
を実行します。
uv pip freeze | uv pip compile - -o requirements.txt
作成されたファイルは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
requirements.txt に記載されたパッケージをインストールする¶
requirements.txt
に記載されたパッケージをインストールするには uv pip install -r requirements.txt
を実行します。
uv pip install -r requirements.txt
uv でよく使うコマンド一覧¶
コマンド | 意味 |
---|---|
uv venv |
.venv という名前の仮想環境を作成する |
uv venv ENV |
ENV という名前の仮想環境を作成する |
uv pip install PACKAGE |
パッケージのインストールする |
uv pip install -r requirements.txt |
requirements.txt の内容をインストールする |
uv pip list |
インストール済みパッケージの一覧を表示する |
uv pip freeze > requirements.txt |
インストール済みパッケージから requirements.txt を作成する |
asdf 環境でインストールしたコマンドが利用出来ない場合の対処¶
asdf 環境の Python に pip で追加したコマンドが使えない場合の対処 に記載しましたが、asdf 環境に pip で追加したコマンドが利用出来ない場合があります。 その場合は以下を実行することでコマンドが利用出来るようになります。
asdf reshim python