そのほか
2025/10/17
森田 和登

Pythonのパッケージマネージャ ”uv” 入門

logo_Python

Python開発の新標準ツール「uv」を徹底解説。Rust製で10〜100倍高速、pip・venv・pyenv・pipxの機能を統合し、pyproject.tomlとuv.lockで再現可能な環境を実現。プロジェクト初期化から依存管理、Python本体のバージョン管理まで、uv init・add・runの基本から実践的な使い方までを丁寧に紹介します。

1 はじめに

Python の仮想環境、パッケージ管理まわりのツールは長年「分業制」でした。パッケージは pip、仮想環境は venvvirtualenv、要件固定は pip-tools、Python 本体の切り替えは pyenv、CLI ツールは pipx など、多くのツールを使い分ける必要がありました。


uv は、こうした作業を 1 つに統合した「all-in-one」のツールです。Rust 製でとても高速、かつ pyproject.toml とロックファイル uv.lock を中心に「再現可能な環境」をつくる思想がはじめから入っています。


本記事では、これから uv を使ってみたい人を対象に、uv とは何か・何が強みなのか・どう使うのかについて、詳細に解説します。


2 uv とは

uv は「Python のパッケージ&プロジェクトマネージャ」です。


プロジェクトの初期化、依存追加・削除、仮想環境の自動作成、ロックファイルによる再現性担保、uvx(= uv tool run の別名)での一時ツール実行、さらに Python 本体のインストール・固定まで、たった一つのツールで面倒を見ます。



 


uv の強み


圧倒的な高速性



  • Rust 製で、pip や Poetry と比較して 10〜100 倍高速

  • 並列ダウンロード、グローバルキャッシュ、最適化されたメタデータ処理による効率化

  • 参照:https://github.com/astral-sh/uv



pip 互換のインターフェース



  • uv pip install など pip 互換のコマンドを提供

  • pip で構築された既存ワークフローからでも段階的に移行可能



再現可能な環境



  • uv.lock によって、OS や Python バージョンの違いをまたいだ同一解決を実現

  • チームメンバー全員が同じ環境で開発できる



統合された機能



  • pip、pip-tools、pipx、poetry、pyenv、virtualenv などの機能を 1 つのツールで提供




インストール手順


macOS / Linux / Windows ともに 公式のインストーラが用意されています。


macOSであれば、Homebrew でも入ります。



macOS / Linux



# 公式インストーラ
curl -LsSf <https://astral.sh/uv/install.sh> | sh

# Homebrew でも可(macOS)
brew install uv

# バージョン確認
uv self version


Windows



powershell -ExecutionPolicy ByPass -c "irm <https://astral.sh/uv/install.ps1> | iex"



3 uv の使い方ガイド

1) プロジェクトを作る



mkdir myapp && cd myapp
uv init


uv init はプロジェクトの雛形を作ります。実行すると、以下のファイルが自動で作成されます。



  • pyproject.toml:プロジェクトの設定と依存関係を記述

  • .python-version:プロジェクトの既定の Python バージョンを示すファイル

  • hello.py:サンプルのエントリーポイント


以後、uv runuv syncuv lock のいずれかを実行すると、プロジェクト直下に 仮想環境 .venvロックファイル uv.lock が自動作成されます。



2) Python 本体のインストールと固定


uv は Python 自体も管理できます。プロジェクトごとに確実にバージョンを揃えたい場合は、この手順を踏みましょう。



# 例:Python 3.12 系をインストール
uv python install 3.12

# プロジェクトに 3.12 を固定(.python-version が更新される)
uv python pin 3.12

# インストール済みの一覧を確認
uv python list


uv python install は Python バイナリをダウンロードし、ローカルにインストールします。


uv python pin.python-version に書き込み、以後の uv コマンドはそのバージョンを使用します。



3) ライブラリのバージョン管理


依存の追加



# ライブラリを追加(pyproject.toml と uv.lock に反映)
uv add httpx

# バージョン範囲を指定して追加
uv add "pandas>=2.2,<3"

# 開発専用の依存を追加
uv add --dev pytest
uv add --group lint ruff


uv add依存関係の宣言(pyproject.toml)とロック(uv.lock、さらにインストールまでを一気に行います。--dev--group依存の区分けも可能です。



依存の削除



# 依存を削除
uv remove httpx



環境の同期



# ロックファイルに基づいて環境を同期
uv sync



ロックファイル uv.lock と再現性



  • uv.lock は、OS・アーキテクチャ・Python バージョンまで含めた普遍的な解決結果を記録します

  • チームや CI/CD での環境のズレ防止に効果的

  • uv では ロック&同期は自動で行われます

  • 完全固定で動かしたいときは -frozen(ロック更新禁止)や -locked(ロックの変更禁止)を使用



既存の requirements.txt との連携



# requirements.txt から依存を取り込む
uv add -r requirements.txt

# uv.lock を requirements.txt にエクスポート
uv export --format requirements-txt -o requirements.txt


pipベースの既存環境や Docker ビルドで便利です。



4) コマンド実行 (uv run)



# プロジェクト環境(.venv)で Python を実行
uv run python -V

# Flask サーバを実行
uv add flask
uv run -- flask run -p 3000

# スクリプトを実行
uv run python hello.py


uv run実行前にロックと同期を自動確認し、毎回整った環境でコマンドを実行します。


仮想環境の手動アクティベートは不要です。



一時的な依存の追加



# 実行時だけ httpx を追加
uv run --with httpx==0.26.0 python -c "import httpx; print(httpx.__version__)"


プロジェクトの依存を汚さずに一時追加できます。



5) ツールの一時的な実行 (uvx)



# ruff を一時実行(プロジェクトを汚さない)
uvx ruff@latest check

# バージョンを厳密指定
uvx --from 'ruff==0.3.0' ruff check

# cowsay を試す
uvx pycowsay 'Hello, uv!'


uvxuv tool run のエイリアスです。


必要な依存を一時的な仮想環境に入れてすぐ実行します。フォーマッタ・リンタ・各種 CLI ツールのお試しに最適です。



6) pip 互換インターフェース(必要な場合のみ)


既存スクリプトや職場の手順の都合で pip 互換の操作が必要な時は uv pip を使います。



# pip 互換のインストール
uv pip install requests

# パッケージ一覧
uv pip list


注意



  • uv pip は環境に直接インストールする低レベル操作で、pyproject.tomluv.lock は更新しません

  • プロジェクトの依存管理を続けたいなら、通常は uv add を使いましょう。


4 まとめ

uv は 「速い」だけではなく、以下の機能がすべて一体化したパッケージマネージャです。



  • Python 本体のバージョン管理uv python

  • ロックファイルによるクロスプラットフォームの再現性uv.lock

  • プロジェクトの自動同期と「常に整った環境」での実行uv run


最初は uv inituv adduv run の 3 点セットから始め、必要に応じて uvxuv export--frozen を取り入れていくのがおすすめです。


5 参考リンク

New call-to-action