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