1049 文字
5 分
uv で Python 環境構築を爆速にする

はじめに#

Python の環境構築は長年の課題です。pip でパッケージを入れ、venv で仮想環境を作り、requirements.txt でバージョンを固定し、場合によっては pyenv で Python 自体のバージョンも管理する。ツールが多すぎて、環境構築だけで疲弊することが珍しくありません。

uv は Astral 社(Ruff の開発元)が提供する Rust 製の Python パッケージマネージャーです。pip の 10〜100 倍速いインストール速度と、Python バージョン管理・仮想環境・パッケージ管理の一元化が特徴です。

インストール#

Terminal window
$ curl -LsSf https://astral.sh/uv/install.sh | sh

Windows なら PowerShell で以下を実行します。

Terminal window
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

インストール後、uv コマンドが使えることを確認します。

Terminal window
$ uv --version
uv x.y.z

Python 自体のインストール#

uv は Python のバージョン管理も担います。pyenv が不要になります。

Terminal window
$ uv python install 3.12
$ uv python list

uv python install はビルド済みバイナリをダウンロードするため、pyenv のようなソースからのコンパイルが不要です。数秒で終わります。

プロジェクトの初期化#

Terminal window
$ uv init my-project
$ cd my-project

uv init は以下のファイルを生成します。

my-project/
├── .git/
├── .gitignore
├── .python-version
├── README.md
├── main.py
└── pyproject.toml

uv init は内部で git init も実行するため、.git/.gitignore も同時に生成されます。

pyproject.toml がプロジェクトの中心です。依存パッケージ、Python バージョン制約、プロジェクトメタデータをすべてここに書きます。

パッケージのインストール#

Terminal window
$ uv add requests
$ uv add ruff --dev

uv add はパッケージを pyproject.toml に追加し、uv.lock にバージョンをロックし、仮想環境にインストールするところまでを 1 コマンドで行います。仮想環境が存在しなければ自動的に作成されます。

速度の違いは体感で明らかです。pip で 30 秒かかるインストールが、uv では 1〜2 秒で終わることも珍しくありません。Rust 製の依存解決エンジンと、パッケージのグローバルキャッシュが効いています。

pip からの移行#

既存の requirements.txt からの移行も簡単です。

Terminal window
$ uv add -r requirements.txt

これだけで requirements.txt に書かれた全パッケージが pyproject.toml に移行され、uv.lock が生成されます。

スクリプトの実行#

Terminal window
$ uv run python main.py
$ uv run ruff check .

uv run は仮想環境をアクティベートせずにコマンドを実行します。source .venv/bin/activate を忘れて「パッケージが見つからない」と悩む問題がなくなります。

インラインスクリプト#

ファイル先頭にメタデータを書くことで、依存パッケージ付きのスクリプトを単体実行できます。

# /// script
# requires-python = ">=3.12"
# dependencies = ["requests", "rich"]
# ///
import requests
from rich import print
resp = requests.get("https://httpbin.org/get")
print(resp.json())
Terminal window
$ uv run fetch.py

uv run がメタデータを読み取り、依存パッケージを自動でインストールしてから実行します。使い捨てスクリプトの共有に便利です。

ツールの実行#

グローバルにインストールせずに CLI ツールを実行する uvx コマンドもあります。npx の Python 版です。

Terminal window
$ uvx ruff check .
$ uvx black --check .
$ uvx mypy src/

ツールは一時的な隔離環境にインストールされ、プロジェクトの依存を汚しません。

pip / poetry との比較#

操作pip + venvpoetryuv
仮想環境の作成python -m venv .venv自動自動
パッケージ追加pip install → 手動で requirements.txt 更新poetry adduv add
ロックファイルなし(pip-tools で別途生成)poetry.lockuv.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 で移行を試してみてください。速度の違いだけでも導入する価値があります。

uv で Python 環境構築を爆速にする
https://blog.c12o.net/posts/uv-python-setup/
作者
Seu (c12o)
公開日
2026-04-18
ライセンス
CC BY-NC-SA 4.0