はじめに
Python の環境構築は長年の課題です。pip でパッケージを入れ、venv で仮想環境を作り、requirements.txt でバージョンを固定し、場合によっては pyenv で Python 自体のバージョンも管理する。ツールが多すぎて、環境構築だけで疲弊することが珍しくありません。
uv は Astral 社(Ruff の開発元)が提供する Rust 製の Python パッケージマネージャーです。pip の 10〜100 倍速いインストール速度と、Python バージョン管理・仮想環境・パッケージ管理の一元化が特徴です。
インストール
$ curl -LsSf https://astral.sh/uv/install.sh | shWindows なら PowerShell で以下を実行します。
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"インストール後、uv コマンドが使えることを確認します。
$ uv --versionuv x.y.zPython 自体のインストール
uv は Python のバージョン管理も担います。pyenv が不要になります。
$ uv python install 3.12$ uv python listuv python install はビルド済みバイナリをダウンロードするため、pyenv のようなソースからのコンパイルが不要です。数秒で終わります。
プロジェクトの初期化
$ uv init my-project$ cd my-projectuv init は以下のファイルを生成します。
my-project/├── .git/├── .gitignore├── .python-version├── README.md├── main.py└── pyproject.tomluv init は内部で git init も実行するため、.git/ と .gitignore も同時に生成されます。
pyproject.toml がプロジェクトの中心です。依存パッケージ、Python バージョン制約、プロジェクトメタデータをすべてここに書きます。
パッケージのインストール
$ uv add requests$ uv add ruff --devuv add はパッケージを pyproject.toml に追加し、uv.lock にバージョンをロックし、仮想環境にインストールするところまでを 1 コマンドで行います。仮想環境が存在しなければ自動的に作成されます。
速度の違いは体感で明らかです。pip で 30 秒かかるインストールが、uv では 1〜2 秒で終わることも珍しくありません。Rust 製の依存解決エンジンと、パッケージのグローバルキャッシュが効いています。
pip からの移行
既存の requirements.txt からの移行も簡単です。
$ uv add -r requirements.txtこれだけで requirements.txt に書かれた全パッケージが pyproject.toml に移行され、uv.lock が生成されます。
スクリプトの実行
$ uv run python main.py$ uv run ruff check .uv run は仮想環境をアクティベートせずにコマンドを実行します。source .venv/bin/activate を忘れて「パッケージが見つからない」と悩む問題がなくなります。
インラインスクリプト
ファイル先頭にメタデータを書くことで、依存パッケージ付きのスクリプトを単体実行できます。
# /// script# requires-python = ">=3.12"# dependencies = ["requests", "rich"]# ///
import requestsfrom rich import print
resp = requests.get("https://httpbin.org/get")print(resp.json())$ uv run fetch.pyuv run がメタデータを読み取り、依存パッケージを自動でインストールしてから実行します。使い捨てスクリプトの共有に便利です。
ツールの実行
グローバルにインストールせずに CLI ツールを実行する uvx コマンドもあります。npx の Python 版です。
$ uvx ruff check .$ uvx black --check .$ uvx mypy src/ツールは一時的な隔離環境にインストールされ、プロジェクトの依存を汚しません。
pip / poetry との比較
| 操作 | pip + venv | poetry | uv |
|---|---|---|---|
| 仮想環境の作成 | python -m venv .venv | 自動 | 自動 |
| パッケージ追加 | pip install → 手動で requirements.txt 更新 | poetry add | uv add |
| ロックファイル | なし(pip-tools で別途生成) | poetry.lock | uv.lock |
| Python バージョン管理 | pyenv 等が別途必要 | pyenv 等が別途必要 | uv python install |
| インストール速度 | 遅い | 遅い | 10〜100 倍速い |
| ツール実行(隔離環境) | pipx(別途インストール) | pipx(別途インストール) | uvx |
uv の最大の強みは これまで 3〜4 個のツールで賄っていた機能が 1 つに統合されている 点です。pyenv + venv + pip + pip-tools の組み合わせを uv 単体で置き換えられます。
まとめ
- uv は Python のバージョン管理・仮想環境・パッケージ管理を 1 コマンドに統合する
- Rust 製の依存解決エンジンにより、pip の 10〜100 倍速いインストールを実現
uv runで仮想環境のアクティベートが不要、uvxでグローバルインストールなしのツール実行が可能- 既存の
requirements.txtからの移行はuv add -r requirements.txtだけ
新規プロジェクトなら最初から uv を使うのがおすすめです。既存プロジェクトでも、まずは uv add -r requirements.txt で移行を試してみてください。速度の違いだけでも導入する価値があります。