Skip to content

Ubuntu 24.04LTS に asdf + uv + direnv で 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 実装からインストール可能なバージョンも表示されます。

「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
# This file was autogenerated by uv via the following command:
#    uv pip compile - -o requirements.txt
numpy==1.26.4
    # via pandas
pandas==2.2.2
python-dateutil==2.9.0.post0
    # via pandas
pytz==2024.1
    # via pandas
six==1.16.0
    # via python-dateutil
tzdata==2024.1
    # via pandas

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