uv は python の環境・パッケージマネージャ。

  • Rust で書かれておりめちゃくちゃ速い
  • pip を置き換えることを目標としている
    • pixi は、同じように Rust で書かれた次世代パッケージマネージャであり、conda を置き換えるもの

Rye は uv に引き継がれたらしい。

uv venv で環境を作り、 .venv/bin/activate で作った環境に入る。その環境内で pip の代わりに uv pip を使う。環境の中ではその環境から抜け出す deactivate コマンドが使用できる。

.venv/bin/activate を毎回入力するのは面倒な場合、ヘルパー関数を作るとよい。
例えば以下の venv 関数は、ディレクトリ構造を遡りながら uv の環境を探して activate を行うため、プロジェクトディレクトリの中ならどこで使っても環境に入れる。

#!/bin/zsh
venv() {
    PWD_ORIG=$PWD
    if ! command -v uv > /dev/null 2>&1; then
        echo "uv command not found. Check if you're in the right environment"
        return 1
    fi
    while true; do
        if [[ -f .venv/bin/activate ]]; then
            break
        fi
        if [[ $PWD == "/" ]]; then
            printf '\033[1;31;49m%s\033[m\n' 'No virtualenv found'
            \cd $PWD_ORIG
            return 1
        fi
        \cd ..
    done
    source .venv/bin/activate
    if [[ $PWD != $PWD_ORIG ]]; then
        printf "\033[6;31;50mvenv at a different directory\033[m\n"
    fi
    printf 'venv at \033[1;32;49m%s\033[m\n' "$PWD"
    \cd $PWD_ORIG
}

python バージョンの指定

環境を作るときに python のバージョンを指定するには uv venv --python 3.12