uv は python の環境・パッケージマネージャ。
- Rust で書かれておりめちゃくちゃ速い
- pip を置き換えることを目標としている
- pixi は、同じように Rust で書かれた次世代パッケージマネージャであり、conda を置き換えるもの
Rye は uv に引き継がれたらしい。
パッケージをインストールするには pip の代わりに uv add を使う。pip っぽいものをどうしても使いたいときは uv pip install を使う。ただし完全に pip と同じ動作をするわけではない。
add したパッケージやそのバージョンなどは uv.lock に書き出されるので、別の PC でも完全な環境の再現ができる。
uv venv で環境を作り、 source .venv/bin/activate で作った環境に入る。環境の中ではその環境から抜け出す 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
}もしくは、 uv run python で、直接 uv 環境で python を実行できる。
python バージョンの指定
環境を作るときに python のバージョンを指定するには uv venv --python 3.12