uvはAstral社がRust製で開発している、超高速なPythonパッケージ・プロジェクトマネージャーです。基本的なインストールや仮想環境の作り方は入門記事で扱いましたが、この記事では応用機能に絞って深掘りします。
結論から言うと、uvは「pip + pip-tools + pipx + pyenv + virtualenv」をまとめて1つに置き換えられます。本記事では実際に Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で uv 0.11.21 を動かし、uv lock / uv sync によるロックファイル管理から、uv pip compile・uvx・Pythonバージョン管理・ワークスペース(モノレポ)まで一通り検証しました。返ってきた実際の出力と実測時間だけを載せています。
この記事のポイント
uv add/uv lock/uv syncでCI/CDに強いロックファイル管理ができるuv pip compileはpip-toolsの完全な代替として使えるuvxでツールをインストールなしにワンショット実行できるuv python installで複数バージョンを共存管理、.python-versionでプロジェクト固定- ワークスペース設定でモノレポの依存を
uv.lock1ファイルに一元管理できる - 同一パッケージのインストールで uv は pip の約6.8〜9.1倍速(実測)
前提環境と uv のインストール
本記事は以下の環境で検証しています。ホストを汚さないよう、すべて Docker の公式 Ubuntu イメージ内で実行しました。
| 項目 | 値 |
|---|---|
| OS | Ubuntu 24.04.4 LTS(Docker公式イメージ ubuntu:24.04) |
| uv バージョン | 0.11.21 |
| コンテナ内の既定Python | CPython 3.12.3(/usr/bin/python3.12) |
| 検証日 | 2026-06-14 |
uvのインストールは公式スクリプト一発です。root権限もPythonの事前インストールも不要で、$HOME/.local/bin にバイナリが置かれるだけです。
To add $HOME/.local/bin to your PATH, run one of:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
$ source $HOME/.local/bin/env
$ cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME=”Ubuntu 24.04.4 LTS”
$ uv –version
uv 0.11.21 (aarch64-unknown-linux-gnu)

uvがどんなツールかは、公式ドキュメント(docs.astral.sh/uv)のトップにも端的にまとまっています。「pip・pip-tools・pipx・poetry・pyenv・twine・virtualenv を1つで置き換える」「pipより10〜100倍速い」と明記されています。

uv add / uv lock / uv sync でロックファイル管理
uvの最大の特徴のひとつがロックファイル(uv.lock)による完全な再現性です。pipでは再現性のために pip freeze > requirements.txt を使いますが、uvはより厳密な uv.lock を自動で生成・管理します。
手順1:プロジェクトを初期化して依存を追加する
$ uv add requests httpx
Using CPython 3.12.3 interpreter at: /usr/bin/python3.12
Creating virtual environment at: .venv
Resolved 11 packages in 824ms
Prepared 10 packages in 724ms
Installed 10 packages in 87ms
+ httpx==0.28.1
+ requests==2.34.2
+ urllib3==2.7.0 (+ anyio 4.13.0, certifi 2026.5.20, h11 0.16.0 …)
uv add を1回実行するだけで、pyproject.toml への依存追記・uv.lock の生成・.venv へのインストールが一気に行われます。今回は requests・httpx の2つを指定して、依存を含む計11パッケージが 824ミリ秒で解決されました。
手順2:ロックの整合性チェックと環境再現
Resolved 11 packages in 1ms
$ uv sync
Resolved 11 packages in 5ms
Checked 10 packages in 0.48ms
$ uv run python -c “import requests,httpx; print(requests.__version__, httpx.__version__)”
2.34.2 0.28.1
$ wc -l uv.lock
192 uv.lock

uv lock --check は CI で「uv.lock が pyproject.toml と矛盾していないか」を検証するコマンドで、今回は 1ミリ秒で完了しました。uv sync は別マシンや本番環境で uv.lock 通りの環境を再現するコマンドで、すでに同期済みなら「Checked 10 packages in 0.48ms」とほぼ瞬時に終わります。生成された uv.lock は192行で、全パッケージのバージョン・ハッシュが記録されています。
注意
uv.lock は git管理に必ず含めてください。このファイルをリポジトリにコミットすることで、チームメンバー全員・CI環境で全く同じパッケージバージョンが再現されます。.gitignore に追加してはいけません。
uv pip compile で requirements.txt を生成する
既存プロジェクトで pip-tools を使っている場合、uv pip compile はほぼそのまま置き換えられます。requirements.in に大雑把な依存を書くと、完全にピン留めされた requirements.txt を出力します。
requests>=2.28
httpx
fastapi
$ uv pip compile requirements.in -o requirements.txt
Resolved 17 packages in 992ms
fastapi==0.136.3
# via -r requirements.in
pydantic==2.13.4
# via fastapi
starlette==1.3.1 httpx==0.28.1 requests==2.34.2 …
$ wc -l requirements.txt
52 requirements.txt

実際に計測してみると、3行(requests・httpx・fastapi)の依存を 17パッケージに展開して 992ミリ秒で完了しました(2026-06-14 実測)。fastapi の依存として pydantic 2.13.4・pydantic-core 2.46.4・starlette 1.3.1 などが自動で引き込まれています。生成された requirements.txt は52行で、各パッケージに # via コメントで依存元が明記されているのがpip-tools譲りの便利なところです。
uv run –with と PEP 723 インラインスクリプト
uv run --with を使うと、仮想環境を作らずに一時的な依存を注入してスクリプトを実行できます。ちょっと試したいだけのケースで便利です。
Installed 5 packages in 46ms
2.34.2
さらに高度な使い方として、PEP 723「インラインスクリプトメタデータ」があります。スクリプトファイルの先頭に依存情報を書いておくと、uvが自動で環境を用意して実行してくれます。
# /// script
# requires-python = “>=3.11”
# dependencies = [“httpx”, “rich”]
# ///
import httpx
print(“httpx”, httpx.__version__)
$ uv run myscript.py
Installed 11 packages in 77ms
httpx 0.28.1
スクリプトのヘッダーに依存を書くだけで、実行時にuvが必要なパッケージ(今回は計11個)を77ミリ秒で用意してから実行してくれました。配布するスクリプトを requirements.txt なしで自己完結させられるのが便利です。
uv tool install / uvx でツールをグローバル管理
CLIツールをPythonで管理したいとき、uv tool install と uvx は pipx の完全な代替として機能します。
手順1:uv tool install でグローバルインストールする
Resolved 1 package in 312ms
Downloading ruff (10.4MiB)
+ ruff==0.15.17
Installed 1 executable: ruff
$ ruff –version
ruff 0.15.17
$ uv tool list
ruff v0.15.17
手順2:uvx でワンショット実行する
インストールせずに一度だけ使いたいツールは uvx が便利です。
Installed 16 packages in 237ms
3.2.4

実際に Ubuntu 24.04 コンテナで検証した結果、ruff 0.15.17 のグローバルインストールが完了し、uvx --from httpie で httpie 3.2.4 を16パッケージ・237ミリ秒で用意してワンショット実行できることを確認しました(2026-06-14 実測)。
uv python install で複数バージョンを管理する
pyenvを使わなくても、uvだけで複数のPythonバージョンを管理できます。uv python install で指定バージョンをダウンロードし、uv python pin でプロジェクトごとに固定します。
cpython-3.15.0b2-linux-aarch64-gnu <download available>
cpython-3.14.6-linux-aarch64-gnu <download available>
cpython-3.13.14-linux-aarch64-gnu <download available>
cpython-3.12.13-linux-aarch64-gnu <download available>
cpython-3.12.3-linux-aarch64-gnu /usr/bin/python3.12
$ uv python install 3.11
Downloading cpython-3.11.15-linux-aarch64-gnu (29.8MiB)
Installed Python 3.11.15 in 6.60s
$ uv init pintest && cd pintest && uv python pin 3.11
Pinned `.python-version` to `3.11`
$ cat .python-version
3.11
$ uv run python –version
Python 3.11.15

実際に検証したところ、uv python install 3.11 は 29.8MiB をダウンロードして Python 3.11.15 を 6.60秒でインストールしました。uv python pin 3.11 で .python-version ファイルに「3.11」が書き込まれ、そのディレクトリでは uv run が自動的に 3.11.15 を使うようになります(2026-06-14 実測)。このファイルをgit管理に含めれば、チーム全員が同じPythonバージョンで開発できます。
正直なところ、CPython 3.12〜3.15(ベータ)が一覧にずらりと並び、フリースレッド版(+freethreaded)まで選べるのは驚きでした。pyenvとの組み合わせを考えていた方は、uvだけで完結するかもしれません。
ワークスペース(モノレポ)で複数パッケージを一元管理
複数のPythonパッケージで構成するモノレポ(monorepo)は、uvのワークスペース機能で管理できます。ルートの pyproject.toml にメンバーを定義するだけで、全パッケージの依存が1つの uv.lock に集約されます。
[tool.uv.workspace]
members = [“packages/*”, “apps/*”]
$ uv add requests –package lib-a
Resolved 8 packages in 358ms
Building lib-a @ file:///tmp/monorepo/packages/lib-a
+ lib-a==0.1.0 (from file:///tmp/monorepo/packages/lib-a)
+ requests==2.34.2
$ uv sync –all-packages
+ lib-b==0.1.0 (from file:///tmp/monorepo/packages/lib-b)
$ wc -l uv.lock
146 uv.lock

実際に packages/lib-a・packages/lib-b・apps/server の3パッケージ構成のモノレポを構築しました。uv add requests --package lib-a のように --package フラグで特定パッケージだけに依存を追加でき、uv sync --all-packages でワークスペース全体を一括同期できます。結果として全体の依存が 146行の単一 uv.lock に集約されました(2026-06-14 実測)。
キャッシュ管理と便利な環境変数
uvのキャッシュはデフォルトで ~/.cache/uv(Linux)に保存されます。環境変数 UV_CACHE_DIR で変更できます。
/root/.cache/uv
$ ls $(uv cache dir)
CACHEDIR.TAG interpreter-v4 sdists-v9 …
# 環境変数でキャッシュパスを変更
$ export UV_CACHE_DIR=/tmp/my-uv-cache
$ uv cache dir
/tmp/my-uv-cache
$ uv pip install httpx -q && du -sh $UV_CACHE_DIR
2.9M /tmp/my-uv-cache
主要な環境変数は以下の通りです。CI環境ではこのキャッシュディレクトリをボリュームとして保存しておくと、2回目以降のインストールが劇的に速くなります(後述のベンチ参照)。
| 環境変数 | 説明 | デフォルト |
|---|---|---|
UV_CACHE_DIR |
キャッシュ保存先 | ~/.cache/uv(Linux) |
UV_PYTHON |
使用するPythonバージョン | システム or .python-version |
UV_INDEX_URL |
PyPI以外のインデックス | https://pypi.org/simple |
UV_COMPILE_BYTECODE |
インストール時にバイトコード生成 | 無効 |
UV_NO_SYNC |
uv run 時にsyncをスキップ |
無効 |
pip vs uv インストール速度の実測比較
「uvは速い」とよく言われますが、実際どのくらい速いのか。fastapi・uvicorn・requests の3パッケージ(依存含む)を、まっさらな ubuntu:24.04 コンテナの空の仮想環境にインストールし、date +%s.%N で実測しました。

計測結果(2026-06-14 実測):
- コールド(初回・キャッシュなし):pip 6.56秒 に対し uv 0.97秒 → 約6.8倍速
- ウォーム(キャッシュあり):pip 1.09秒 に対し uv 0.12秒 → 約9.1倍速
キャッシュが効いた2回目では、uvは0.12秒とほぼ一瞬で終わります。コールドでもウォームでもuvが圧倒的に速く、特にCI/CDのように何度もインストールを繰り返す場面では、この差がそのままパイプライン全体の短縮につながります。公式が「pipより10〜100倍速い」とうたう根拠が、手元でもはっきり確認できました。
よくあるエラーと解決策
「uv: command not found」
インストール直後はPATHが通っていないことがあります。$HOME/.local/bin を通せば解決します。
$ source $HOME/.local/bin/env
# 永続化するには .bashrc に追加
$ echo ‘export PATH=”$HOME/.local/bin:$PATH”‘ >> ~/.bashrc
$ source ~/.bashrc && uv –version
uv 0.11.21 (aarch64-unknown-linux-gnu)
「This environment is externally managed」エラー(pip使用時)
Ubuntu 24.04 では pip install を直接実行すると PEP 668 のエラーが出ます。uvを使うとこのエラーは一切発生しません。uvは最初から仮想環境を前提に設計されているため、システムのPythonを壊す心配がないからです。
注意
Ubuntu 24.04 LTS の Python 環境は「外部管理環境」として保護されています。sudo pip install でシステムパッケージを上書きしないよう、uvの仮想環境機能(uv venv / uv add)を活用してください。
uvx と uv tool の使い分けがわからない
頻繁に使うツール(ruff・black など)は uv tool install でグローバル導入し、たまにしか使わないツールは uvx でワンショット実行する、という使い分けがおすすめです。uvの公式ドキュメントには各機能の解説ページが整理されているので、迷ったら一次情報を確認しましょう。


まとめ
uv の応用機能を Ubuntu 24.04.4 LTS(ubuntu:24.04 コンテナ)で一通り実測検証しました。
uv add/uv lock/uv sync:11パッケージを824msで解決、uv.lock 192行で完全な再現性uv pip compile:pip-tools の代替。3行の入力を17パッケージ・992msで解決し52行に展開uv run --with/ PEP 723:仮想環境不要のスクリプト実行(77msで環境構築)uvx:インストールなしでツールをワンショット実行(httpie 3.2.4 を237msで用意)uv python install:Python 3.11.15 を6.60sで導入、pyenv不要でバージョン管理が完結- ワークスペース:3パッケージのモノレポ依存を146行の単一 uv.lock で管理
- 速度:同一パッケージ群のインストールで pip の約6.8〜9.1倍速(実測)
正直なところ「uvは速い」というイメージはありましたが、Pythonバージョン管理からモノレポ対応まで、これ1ツールでここまでカバーできるとは思っていませんでした。既存の pyenv + pip + pip-tools + pipx の組み合わせをuvに一本化することを強くお勧めします。なお、uvの基本的なインストールと仮想環境の作り方は入門記事で詳しく解説しています。
実際にVPS上でPython開発環境を構築したい方は、まずサーバーを立てる必要があります。開発環境として使いやすく、東京リージョンが選べるVPSなら以下が定番です。



コメント