Python uv完全解説
高速なPythonパッケージ管理ツールuvの全体像を、役割・基本コマンド・pipやvenvとの違いから整理する入門ガイド。
uvは、Pythonのパッケージ管理、仮想環境、Python本体のバージョン管理、CLIツール実行をまとめて扱える高速な開発ツールです。この記事では「pipやvenvを毎回どう組み合わせればいいのか分からない」という段階から、uvで何をすればよいかを一枚の地図として整理します。
1. uvとは何か
uvはAstralが開発している、Rust製の高速なPythonパッケージ・プロジェクト管理ツールです。
公式ドキュメントでは、uvは pip、pip-tools、pipx、poetry、pyenv、virtualenv などの役割をまとめて置き換えられるツールとして説明されています。初心者目線では、「Pythonプロジェクトを作る」「ライブラリを入れる」「仮想環境を用意する」「コマンドを実行する」を、できるだけ少ない手順で扱うための道具と考えると入りやすいです。
flowchart LR
U["uv"] --> P["Python本体の管理"]
U --> V["仮想環境 .venv"]
U --> D["依存関係 pyproject.toml"]
U --> L["ロックファイル uv.lock"]
U --> R["コマンド実行 uv run"]
U --> T["CLIツール実行 uvx / uv tool"]
uv init、依存関係は uv add、実行は uv run と覚えると迷いにくくなります。
2. uvが解決すること
Python開発では、パッケージ、仮想環境、Pythonバージョン、ロックファイルが別々の話として出てきます。uvはそれらをひとつの操作体系にまとめます。
環境構築が速い
公式ドキュメントでは、uvはpipより10倍から100倍高速と説明されています。特に依存関係が多いプロジェクトや、キャッシュが効く環境で体感しやすいです。
仮想環境を自動で扱える
uv run や uv sync を使うと、必要に応じてプロジェクト内の .venv を作成し、依存関係を同期します。
再現性を高められる
uv.lock に解決済みの依存関係を記録できます。チーム開発や別PCでの再セットアップ時に、同じ依存関係へそろえやすくなります。
3. まず押さえるファイル
uvのプロジェクトでは、pyproject.toml、.venv、uv.lock の役割を分けて理解すると全体像が見えます。
| 名前 | 何を持つか | Git管理 | 初心者向けの理解 |
|---|---|---|---|
pyproject.toml |
プロジェクト名、Pythonバージョン条件、依存関係など | 管理する | 「このプロジェクトの設計書」 |
.venv |
実際にライブラリが入る仮想環境 | 管理しない | 「このプロジェクト専用のPython環境」 |
uv.lock |
解決済みの正確なパッケージバージョン | 管理する | 「同じ環境を再現するための記録」 |
.python-version |
そのディレクトリで使うPythonバージョン | 管理することが多い | 「このプロジェクトで使うPythonの目印」 |
flowchart TD
Init["uv init"] --> Py["pyproject.toml"]
Init --> Ver[".python-version"]
Add["uv add requests"] --> Py
Run["uv run main.py"] --> Venv[".venv"]
Run --> Lock["uv.lock"]
Sync["uv sync"] --> Venv
Lock --> Sync
4. インストールと確認
Windowsでは公式のPowerShell用インストーラーが用意されています。macOSやLinuxではシェルスクリプト、Homebrew、pipなど複数の方法があります。
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
インストール確認
uv --version
uv help
uv コマンドが見つからない場合は、ターミナルを開き直すか、PATHが反映されているかを確認します。
5. 最初のプロジェクトを作る
uvの基本形は、作成、追加、実行、同期です。まずはこの4つだけで十分です。
新しいプロジェクトを作る
uv init hello-uv
cd hello-uv
uv init を実行すると、pyproject.toml やサンプルの main.py などが作られます。
プログラムを実行する
uv run main.py
uv run は、プロジェクトの環境を確認し、必要なら .venv や uv.lock を用意してからコマンドを実行します。
ライブラリを追加する
uv add requests
依存関係は pyproject.toml に追加され、実際の解決結果は uv.lock に記録されます。手で pip install するよりも、プロジェクトの状態がファイルに残りやすいのが利点です。
依存関係を同期する
uv sync
別PCでリポジトリを取得した後や、チームメンバーが依存関係を追加した後は uv sync で環境をそろえます。
6. よく使うコマンド一覧
最初からすべて覚える必要はありません。日常的にはプロジェクト系コマンドを中心に使います。
| やりたいこと | コマンド | 使う場面 |
|---|---|---|
| プロジェクト作成 | uv init my-app | 新しくPythonプロジェクトを始める |
| 依存関係を追加 | uv add pandas | ライブラリをプロジェクトに入れる |
| 依存関係を削除 | uv remove pandas | 不要なライブラリを外す |
| コマンド実行 | uv run python main.py | プロジェクト環境でPythonを動かす |
| 環境同期 | uv sync | uv.lock に合わせて .venv を整える |
| ロックファイル更新 | uv lock | 依存関係の解決結果を明示的に更新する |
| 依存関係ツリー確認 | uv tree | どのライブラリが何に依存しているか見る |
| Pythonを入れる | uv python install 3.12 | 指定バージョンのPythonを用意する |
| Pythonを固定 | uv python pin 3.12 | プロジェクトで使うPythonバージョンを指定する |
| 一時的にツール実行 | uvx ruff check . | ruffなどのCLIを一回だけ使う |
7. pip・venvとの違い
uvはpipやvenvを否定するというより、よく使う作業をまとめて扱いやすくする道具です。
| 従来の考え方 | uvでの考え方 | ポイント |
|---|---|---|
python -m venv .venv |
uv run または uv sync |
必要に応じてプロジェクト環境を作成・同期する |
pip install requests |
uv add requests |
依存関係を pyproject.toml に残す |
pip freeze > requirements.txt |
uv.lock |
解決済みバージョンをロックファイルに記録する |
pipx run ruff |
uvx ruff |
CLIツールを一時環境で実行できる |
uv pip install のようなpip互換インターフェースもあります。ただし、新しいuvプロジェクトでは、まず uv add、uv remove、uv sync、uv run を使うほうが、プロジェクト管理としては分かりやすいです。
8. 実務での基本ワークフロー
個人開発でもチーム開発でも、依存関係をファイルに残し、実行時はuvに環境をそろえてもらう流れが基本です。
新規プロジェクト
uv init my-app
cd my-app
uv python pin 3.12
uv add fastapi
uv add --dev pytest
uv run python main.py
既存プロジェクトを取得した後
git clone https://example.com/my-app.git
cd my-app
uv sync
uv run pytest
一時的にツールを実行する
uvx ruff check .
uvx black .
uvx は uv tool run の短い別名です。プロジェクトに依存関係として追加するほどではないCLIツールを、さっと実行したいときに便利です。
9. lockとsyncの考え方
uvでは、依存関係を「解決する」ことと「環境へ入れる」ことを分けて考えます。
lock
uv lock は、pyproject.toml に書かれた依存関係を解決して、具体的なバージョンを uv.lock に記録します。
sync
uv sync は、uv.lock の内容に合わせて、プロジェクトの .venv を更新します。
公式ドキュメントでは、uv run のようなコマンドは実行前に自動でlockとsyncを行い、環境を最新状態に保つと説明されています。普段は自動に任せてもよいですが、CIやチーム開発では uv sync を明示すると状態をそろえやすいです。
uv lock
uv sync
uv run pytest
10. どんな人に向いているか
uvは、これからPython開発を始める人にも、既存のpip/venv運用を軽くしたい人にも向いています。
| 状況 | uvを使うメリット | まず覚えるコマンド |
|---|---|---|
| Python入門中 | 仮想環境と依存関係をまとめて扱える | uv init、uv add、uv run |
| データ分析 | pandasやjupyter周辺の依存関係を再現しやすい | uv add、uv sync |
| Web API開発 | FastAPI、pytest、ruffなどをプロジェクト単位で管理しやすい | uv add --dev、uv run |
| CLIツール利用 | プロジェクトに入れずに一時実行できる | uvx、uv tool install |
| チーム開発 | uv.lock で環境差分を減らせる | uv sync、uv lock |
11. 初心者がつまずきやすい点
uvは便利ですが、pipと同じ感覚で使いすぎると、プロジェクト管理の利点を逃すことがあります。
uv pip install から始めない
pip互換インターフェースは便利ですが、uvプロジェクトでは uv add を使うほうが依存関係を管理しやすいです。
.venv はGitに入れない
仮想環境は再作成できる作業用ディレクトリです。共有するのは pyproject.toml と uv.lock です。
lockは自動更新される
uv run は必要に応じてロックと同期を行います。意図せずlockが変わった場合は、依存関係の変更が入っていないか確認します。
12. まとめ
uvは、Python開発の「環境構築が面倒」「何をGitに入れるのか分からない」「pipとvenvの組み合わせで迷う」を減らすための強力な入口です。
| 覚える順番 | コマンド | 意味 |
|---|---|---|
| 1 | uv init | プロジェクトを作る |
| 2 | uv add | ライブラリを追加する |
| 3 | uv run | プロジェクト環境で実行する |
| 4 | uv sync | 環境をロックファイルに合わせる |
| 5 | uvx | CLIツールを一時実行する |