uv1 は Rust で書かれた Python のパッケージ管理ツールである。
pip、pip-tools、virtualenv、pyenv、pipx、poetry が別々に担っていた役割を一つのコマンドにまとめ、依存解決とインストールを高速に行う。
この記事は、公式ドキュメント2を読みながら、日常的に使うコマンドを用途別にまとめた早見表である。
大きく分けて、pyproject.toml を軸にしたプロジェクト管理、単体スクリプトの実行、CLI ツールの実行と常駐、Python 本体のバージョン管理、そして pip 互換の低レベルインターフェースがある。
インストールと自己管理
curl -LsSf https://astral.sh/uv/install.sh | sh| コマンド | 用途 |
|---|---|
uv self update | uv 自身を最新版に更新する |
uv version | uv のバージョンを表示する |
uv --help | ヘルプを表示する(各サブコマンドにも --help がある) |
プロジェクト管理
pyproject.toml で依存を宣言し、uv.lock で解決結果を固定し、.venv に環境を作る。
このワークフローがプロジェクト管理の中心になる。
| コマンド | 用途 |
|---|---|
uv init myapp | myapp/ に新規プロジェクトを作る |
uv init | カレントディレクトリを初期化する |
uv init --lib | ライブラリ用の構成で初期化する |
uv add requests | 依存を追加し、pyproject.toml・uv.lock・.venv を更新する |
uv add 'requests==2.31.0' | バージョンを指定して追加する |
uv add --dev pytest | 開発用依存グループに追加する |
uv add -r requirements.txt | 既存の requirements から一括で追加する |
uv add 'git+https://github.com/psf/requests' | Git リポジトリから追加する |
uv remove requests | 依存を削除する |
uv sync | uv.lock に合わせて .venv を同期する |
uv lock | ロックファイルを作成・更新する |
uv lock --upgrade-package requests | 特定パッケージだけ更新する |
uv run main.py | プロジェクト環境でスクリプトを実行する |
uv run -- flask run -p 3000 | プロジェクト環境で任意のコマンドを実行する |
uv tree | 依存関係ツリーを表示する |
uv build | 配布物(sdist / wheel)を dist/ に生成する |
uv publish | パッケージインデックスに公開する |
uv run を使えば .venv を明示的に有効化する必要はないが、有効化して従来通り使うこともできる。
source .venv/bin/activateプロジェクト直下には次のファイルが置かれる。
| ファイル | 役割 |
|---|---|
pyproject.toml | プロジェクトのメタデータと依存の宣言 |
uv.lock | 解決結果を固定するクロスプラットフォームなロックファイル(uv が管理する) |
.python-version | 既定の Python バージョン |
.venv/ | 仮想環境 |
スクリプト実行
単体のスクリプトは、プロジェクトを作らずに実行できる。 依存はコマンドで一時的に足すか、PEP 7233 のインラインメタデータとしてスクリプト先頭に埋め込む。
| コマンド | 用途 |
|---|---|
uv run example.py | スクリプトを実行する |
uv run --with requests example.py | 依存を一時的に足して実行する |
uv run --with 'requests<3' --with rich example.py | --with を重ねて複数の依存を足す |
uv run --python 3.12 example.py | Python 3.12 で実行する |
uv run --no-project example.py | プロジェクト内でもプロジェクト依存を無視する |
uv add --script example.py 'requests<3' rich | スクリプトにインライン依存を書き込む |
uv lock --script example.py | スクリプト用のロックファイルを作る |
echo 'print("hi")' | uv run - | 標準入力から実行する |
uv add --script は、スクリプト先頭に依存を書いたコメントブロック(PEP 723 のインラインメタデータ)を追記する。
依存の情報がスクリプト自身に入るので、requirements.txt や pyproject.toml を別に用意しなくても、そのファイル一つで依存関係が完結する。
受け取った側は uv run example.py を実行するだけでよく、uv がこのメタデータを読んで依存を用意する。
このため、環境構築の説明なしに人へ渡したいちょっとした自動化スクリプトや、Gist のような単一ファイルの共有が主な用途になる。
書き込まれるメタデータは次の形になる。
# /// script# requires-python = ">=3.12"# dependencies = [# "requests<3",# "rich",# ]# ///シェバングに指定すれば、スクリプトを直接実行できる。
#!/usr/bin/env -S uv run --script# /// script# dependencies = ["httpx"]# ///import httpxchmod +x example.py && ./example.pyツールの実行とインストール
ruff や black のような CLI ツールは、一時環境で実行するか、ユーザー全体にインストールして常駐させる。
uvx は一時環境での実行、uv tool install は PATH に実行ファイルを通す常駐インストールである。
| コマンド | 用途 |
|---|---|
uvx ruff check | 一時環境でツールを実行する(uv tool run の別名) |
uvx [email protected] check | バージョンを指定して実行する |
uvx --from httpie http example.com | パッケージ名とコマンド名が違うとき --from で指定する |
uv tool install ruff | ツールをユーザー全体にインストールし、PATH に通す |
uv tool install 'httpie>0.1.0' | バージョン制約つきでインストールする |
uv tool install mkdocs --with mkdocs-material | プラグインを同梱してインストールする |
uv tool upgrade ruff | インストール済みツールを更新する |
uv tool upgrade --all | すべてのツールを更新する |
uv tool uninstall ruff | ツールをアンインストールする |
uv tool list | インストール済みツールを一覧する |
uv tool update-shell | PATH を通すためシェル設定を更新する |
uv は、import せずにシェルからコマンドとして起動するパッケージをツールと呼び、専用のコマンド群を用意している。
ruff、mypy、black のように、コードを外から検査・整形するもので、アプリの一部としては動かない。
そのためプロジェクトの依存(uv add)とは分け、プロジェクトから隔離した環境に入れる。
判断の目安は、コード中で import するなら uv add、コマンド名を打って使うだけなら uv tool である。
インストールしたツールの環境は、直接いじらず uv tool upgrade や uv tool install 経由で更新する。
uv はツール環境を直接手を加える前提で作っていないため、中の .venv に手動で pip install などをすると壊れることがある。
Python バージョンの管理
uv は Python 本体のインストールとバージョン切り替えも担う。
pyenv に相当する役割であり、uv を使うなら pyenv は不要になる。
| コマンド | 用途 |
|---|---|
uv python install 3.12 | Python 3.12 をインストールする |
uv python install 3.11 3.12 | 複数バージョンをまとめてインストールする |
uv python install [email protected] | 別実装(PyPy)をインストールする |
uv python install | 最新版をインストールする |
uv python list | 利用可能・インストール済みのバージョンを一覧する |
uv python pin 3.12 | .python-version に書き込み、プロジェクトに固定する |
uv python pin --global 3.11 | ユーザー全体の既定を固定する |
uv python find '>=3.11' | 条件に合う Python を探す |
uv python upgrade 3.12 | 管理下の 3.12 を更新する |
uv python uninstall 3.11 | バージョンをアンインストールする |
pip 互換インターフェース
uv pip は、既存の pip / pip-tools ワークフローをそのまま高速化するための低レベルコマンド群である4。
プロジェクトの uv add / uv sync とは別系統で、requirements.txt を手で扱う場面や移行期に使う。
仮想環境
| コマンド | 用途 |
|---|---|
uv venv | .venv を作る |
uv venv --python 3.12 | Python 3.12 で作る |
uv venv myenv | 名前を指定して作る |
パッケージ操作
| コマンド | 用途 |
|---|---|
uv pip install flask | パッケージをインストールする |
uv pip install 'flask[dotenv]' | extra つきでインストールする |
uv pip install 'ruff>=0.2.0' | バージョン制約つきでインストールする |
uv pip install -e . | カレントを editable でインストールする |
uv pip install -r requirements.txt | requirements から一括インストールする |
uv pip install -r pyproject.toml --all-extras | pyproject.toml の全 extra を入れる |
uv pip install 'git+https://github.com/astral-sh/ruff' | Git からインストールする |
uv pip uninstall flask | アンインストールする |
環境の確認
| コマンド | 用途 |
|---|---|
uv pip list | インストール済みパッケージを一覧する |
uv pip freeze | requirements 形式で出力する |
uv pip show flask | パッケージの詳細を表示する |
uv pip tree | 依存ツリーを表示する |
uv pip check | 依存の整合性を確認する |
ロックと同期(pip-tools 相当)
| コマンド | 用途 |
|---|---|
uv pip compile requirements.in -o requirements.txt | .in から固定された .txt を生成する |
uv pip compile pyproject.toml -o requirements.txt | pyproject.toml から生成する |
uv pip compile requirements.in -o requirements.txt --upgrade | すべて更新して再生成する |
uv pip compile requirements.in -o requirements.txt --upgrade-package ruff | 特定パッケージだけ更新する |
uv pip compile requirements.in -o requirements.txt --universal | プラットフォーム非依存で解決する |
uv pip sync requirements.txt | 環境を requirements.txt に厳密に一致させる |
uv pip install は既存のパッケージを残すが、uv pip sync はロックにないものを削除して環境を完全一致させる。
pip-tools 風のワークフローはこうなる。
uv pip compile requirements.in -o requirements.txt # 依存を固定するuv pip sync requirements.txt # 環境を一致させる既存プロジェクトの移行
uv pip の主な使いどころは、すでに pip と requirements.txt で動いているプロジェクトの移行である。
uv add / uv sync のマネージド構成へは、二段階で無理なく移せる。
段階1では、既存のコマンドを uv pip に置き換えるだけにとどめる。
requirements.txt の構成はそのままで、既存の pip コマンドを uv pip に差し替えるだけでよい。
uv は pip の drop-in replacement であり、10〜100 倍の高速化が見込める5。
uv venv # python -m venv .venv の置き換えuv pip install -r requirements.txt # pip install -r ... の置き換え段階2では、余裕ができてから pyproject.toml と uv.lock のマネージド構成へ引き上げる。
uv add -r が既存の requirements.txt を読み、依存を pyproject.toml に取り込み、uv.lock を生成する。
uv init --bare # 既存ディレクトリに pyproject.toml だけ作るuv add -r requirements.txt # requirements.txt の中身を依存として取り込むここまで来れば、以降は uv add / uv sync / uv run に切り替えられ、requirements.txt は不要になる。
キャッシュとディレクトリ
| コマンド | 用途 |
|---|---|
uv cache clean | キャッシュを削除する |
uv cache prune | 古いキャッシュ項目を削除する |
uv cache dir | キャッシュディレクトリのパスを表示する |
uv tool dir | ツールの格納先を表示する |
uv python dir | Python の格納先を表示する |
使い分けの目安
| やりたいこと | 使うコマンド |
|---|---|
| アプリやライブラリを開発する | uv init → uv add → uv run |
| 依存を一度だけ足してスクリプトを試す | uv run --with |
| CLI ツールを常駐させる | uv tool install |
| CLI ツールを一度だけ使う | uvx |
| Python 本体を入れて切り替える | uv python install / uv python pin |
| 既存の pip / requirements 運用を速くする | uv pip compile / uv pip sync |
Footnotes
-
uv 公式サイト。https://docs.astral.sh/uv/ ↩
-
本記事のコマンドは公式ドキュメントの各ガイド(Projects、Scripts、Tools、Installing Python、The pip interface)に基づく。 ↩
-
PEP 723 は、スクリプトの依存や必要な Python バージョンを、ファイル先頭のコメントブロックに記述する仕様。 ↩
-
uv pipは名前に反して pip を呼び出さない。pip と同じインターフェースを提供することを示すための名称である。 ↩ -
uv は pip / pip-tools / virtualenv の drop-in replacement を掲げ、pip 比 10〜100 倍の高速化をうたう。https://docs.astral.sh/uv/ ↩