Python

uvとは?Pythonの環境構築・パッケージ管理・バージョン管理の使い方を徹底解説

uvは、Rust言語で書かれた非常に高速なPythonのパッケージ管理・プロジェクト管理ツールです。これまでpip・venv・pyenv・Poetryなど複数のツールに分かれていた「パッケージのインストール」「仮想環境の作成」「Python本体のバージョン管理」「プロジェクトの依存解決」を、uvひとつに統合できるのが最大の特長です。本記事では、uvのインストールから、uv inituv adduv runuv syncによるプロジェクト運用、uv pythonでのバージョン管理、uvxの使い方、そしてpip・Poetry・pyenvとの違いまでを、実際に動くコマンド付きで解説します。

まとめ

uvは、pip・venv・pyenv・Poetryなどの役割を1つにまとめた、Rust製の高速なPython開発ツールです。uv initでプロジェクトを作り、uv adduv removeで依存を管理し、uv runuv syncで実行・同期する流れが基本になります。さらにuv pythonでPython本体のバージョン管理まで一元化でき、uvxを使えば仮想環境を作らずにツールを使い捨て実行できます。以下では、インストールから各コマンドの具体的な使い方、pyenv・Poetry・condaとの違いまでを、順を追って解説します。

uvとは何か

uvは、Ruff(高速なPythonリンター)でも知られるAstral社が開発しているツールで、pipの10〜100倍とされる速度でパッケージのインストールや依存関係の解決を行います。高速性の主な理由は、Rust製であること、依存解決を並列で行うこと、一度取得したパッケージをグローバルキャッシュで再利用することの3点です。

設計思想の面では、RustのパッケージマネージャーであるCargoから強い影響を受けています。Cargoがプロジェクトのビルド・依存管理・ロックファイル生成を一手に担うのと同じように、uvもPythonプロジェクトの管理を一元化します。Cargoの役割については「Cargoとは何か?Rust公式のパッケージ管理・ビルドツールCargoの役割と基本概要を詳しく解説」も参考になります。

なお、現在Astralが保守しているRyeも似た目的のツールですが、機能の多くがuvに引き継がれ、公式にもuvへの移行が案内されています。Rye自体の概要は「Ryeの概要とPythonプロジェクト管理における重要性」で確認できます。これから新しく環境を整えるなら、uvを選んでおくのが無難です。

uvのインストール方法(Windows・macOS・Linux)

uvは公式のインストールスクリプトを使うのが最も手軽です。OSごとに次のコマンドを実行します。

macOS・Linux

# 公式スクリプト(推奨)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Homebrew を使う場合(macOS / Linux)
brew install uv

Windows

PowerShellを開き、次のコマンドを実行します。

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

インストール後はシェル(PowerShellやターミナル)を開き直すと、uvコマンドがどのディレクトリからでも使えるようになります。Windowsで「uvが見つからない」場合は、新しいウィンドウを開き直すか、PATHにuvの実行ファイルの場所が含まれているかを確認してください。

pip・pipxからの導入とバージョン確認

すでにPythonが入っている環境では、pipやpipxでも導入できます。インストール済みのバージョン確認や、uv自身の更新は次のとおりです。

# pip / pipx から
pip install uv
pipx install uv

# バージョン確認
uv --version

# uv 自身を最新版に更新(スクリプト導入時)
uv self update

uvでPythonをインストール・バージョン管理する(pyenvの代替)

uvはパッケージだけでなく、Python本体のバージョン管理もできます。これがpyenvを置き換えられる理由です。指定したバージョンをダウンロードして使い分けられるため、別途pyenvを用意する必要がありません。

# 特定バージョンをインストール
uv python install 3.12

# 複数バージョンをまとめてインストール
uv python install 3.12 3.13

# インストール済み・利用可能なバージョンの一覧
uv python list

# 不要になったバージョンを削除
uv python uninstall 3.11

プロジェクトで使うPythonバージョンを固定するにはuv python pinを使います。これがよくある誤解ポイントで、uv python useというコマンドは存在しません。uv python pinを実行すると、カレントディレクトリに.python-versionファイルが作られ、以降のuvコマンドがそのバージョンを使います。

# プロジェクトで使うバージョンを固定(.python-version を生成)
uv python pin 3.12

# 切り替えたいときは別バージョンを pin し直す
uv python pin 3.13

uvでインストールできるバージョンは各リリース時点のものに固定されているため、ごく新しいバージョンを使いたい場合はuv自体の更新が必要なことがあります。新しいPythonの機能差を把握したいときは「Python 3.13の概要と新機能についての全体像」や「Python 3.14で追加された新機能の概要とアップデート全体像」もあわせて確認してください。

uvでプロジェクトを始める(init・add・remove・sync・run・lock)

uvの本領は、プロジェクト単位の管理にあります。uv initでプロジェクトを作成すると、必要なファイルが自動生成されます。

# 新規プロジェクトを作成
uv init myapp
cd myapp

生成される主なファイルは次のとおりです。pyproject.tomlに依存やプロジェクト設定が記録され、.python-versionに使用するPythonバージョン、uv.lockに解決済みの正確なバージョンが記録されます。仮想環境(.venv)とuv.lockは、最初にuv runuv syncuv lockのいずれかを実行した時点で作られます。

ファイル / フォルダ 役割
pyproject.toml 依存・設定の宣言
uv.lock 確定バージョンの記録
.python-version 使用Pythonバージョン
.venv/ 仮想環境

依存パッケージの追加・削除や、環境の同期、スクリプト実行は次のコマンドで行います。

# 依存を追加(pyproject.toml と uv.lock を自動更新)
uv add requests
uv add "flask>=3.0"

# 依存を削除
uv remove requests

# pyproject.toml / uv.lock に合わせて環境を同期
uv sync

# プロジェクト環境内でスクリプトを実行
uv run main.py
uv run python -V

# 依存を解決して uv.lock を更新
uv lock

uv runは実行前に依存とPythonバージョンの同期を自動で行うため、activateのような有効化操作を手動で行わなくても、常に正しい環境でコマンドが走ります。配布用パッケージを作成する場合はuv buildを使います(uv package buildではありません)。

仮想環境を自動で管理する

uvはプロジェクトごとに仮想環境を自動作成するため、多くの場面でvenvやvirtualenvを手動で作る必要がありません。明示的に仮想環境だけを作りたい場合はuv venvを使います。

# 仮想環境を作成(.venv が作られる)
uv venv

# Pythonバージョンを指定して作成
uv venv --python 3.12

# 有効化(macOS / Linux)
source .venv/bin/activate

# 有効化(Windows)
.venv\Scripts\activate

uvが作る仮想環境は標準のvenvと互換性があるため、既存のツールやエディタの設定をそのまま使えます。

uvxとuvの違い・ツールを使い捨てで実行する

「uvとuvxの違い」は検索でもよく問われます。結論としては、uvxはuv tool runの短縮形で、仮想環境を作らずにツールを一時的に実行するためのコマンドです。プロジェクトの依存に加えたくないが一度だけ使いたいCLIツール(リンターやフォーマッターなど)を、その場で取得して実行できます。

# uvx は uv tool run の短縮形(同じ動作)
uvx ruff check .
uv tool run ruff check .

# よく使うツールを常設インストールしたい場合
uv tool install ruff

使い分けの目安は、uv add=そのプロジェクトの依存として恒久的に追加、uvx=プロジェクトを汚さず使い捨てで実行、uv tool install=どのプロジェクトからでも使える常設コマンドとして導入、です。

pip互換インターフェース(uv pip)

既存のpipワークフローやrequirements.txtをそのまま活かしたい場合は、uv pipインターフェースが使えます。コマンド体系はpipにそろえつつ、速度だけがuvの恩恵を受けられます。

# pip と同じ感覚でインストール
uv pip install requests

# requirements.txt から一括インストール
uv pip install -r requirements.txt

# requirements.in から requirements.txt を生成(コンパイル)
uv pip compile requirements.in -o requirements.txt

# requirements.txt に環境を厳密同期
uv pip sync requirements.txt

単一ファイルスクリプトとPEP 723

uvは、1ファイルのPythonスクリプトに依存関係を直接書き込むPEP 723(インラインスクリプトメタデータ)に対応しています。これにより、別途requirements.txtやプロジェクトを用意しなくても、スクリプト単体で必要なライブラリを宣言・実行できます。依存はスクリプト先頭のuv add --scriptで追加します。

# スクリプトに依存を追記(PEP 723 ブロックを生成)
uv add --script example.py requests

生成されるブロックは次の形式です。旧来よく誤記される# uv: depという記法ではない点に注意してください。

# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "requests",
# ]
# ///

import requests
print(requests.get("https://example.com").status_code)

あとはuv runで実行するだけで、uvがブロックを読み取り、一時的な環境に依存をインストールして実行します。再現性を高めたい場合はuv lock --scriptでスクリプト用のロックファイルを作れます。

# スクリプトを実行(一時環境を自動作成)
uv run example.py

# スクリプトのひな形を新規作成
uv init --script example.py

pip・Poetry・pyenv・condaとの違い

uvは複数ツールの役割を兼ねるため、従来ツールとの対応関係を押さえると理解しやすくなります。下表は主な担当範囲の比較です。

ツール パッケージ管理 仮想環境 Python本体管理 ロックファイル
uv
pip × ×
Poetry ×
pyenv × × ×
conda

pipは単体ではPython本体や仮想環境を管理しないため、従来はpyenvやvenvと組み合わせる必要がありました。uvはこれらを1つにまとめられる点が強みです。データサイエンス寄りでcondaを使ってきた場合の違いは「condaとpipの違いから学ぶAnacondaでのパッケージ管理方法」も参考になります。

よくあるエラーと対処

uvでつまずきやすいポイントと対処を整理します。

uv syncが失敗する/依存がかみ合わない:まずpyproject.tomlのあるプロジェクトディレクトリで実行しているかを確認します。ロックと宣言がずれている場合は、uv lockで解決し直してからuv syncを再実行します。requires-pythonの指定が手元のPythonと矛盾していないかも確認しましょう。

指定したPythonが見つからない:uv python install <バージョン>で対象を入れるか、uv python pinでプロジェクトのバージョンを合わせます。uv python listで利用可能なバージョンを確認できます。

Windowsでuvコマンドが認識されない:インストール直後はシェルを開き直す必要があります。それでも通らない場合はPATH設定を確認してください。

よくある質問(FAQ)

uvとuvxの違いは何ですか?

uvxはuv tool runの短縮形で、仮想環境を作らずにツールを一時的に実行するためのコマンドです。プロジェクトの恒久的な依存として加えたい場合はuv add、その場限りで実行したい場合はuvxを使い分けます。

uvでPythonのバージョンを切り替えるには?

uv python installで目的のバージョンを入れ、uv python pin 3.12のように固定します。.python-versionが更新され、以降のコマンドがそのバージョンを使います。uv python useというコマンドは存在しません。

uvでインストールしたPythonのバージョンを確認するには?

uv python listでインストール済み・利用可能なバージョンを一覧できます。プロジェクトで実際に使われているバージョンはuv run python -Vで確認できます。

pipやpyenvからuvに移行しても大丈夫ですか?

uvはuv pipインターフェースでpip互換のコマンドとrequirements.txtをそのまま扱えるため、段階的に移行できます。Python本体の管理もuvに集約できるため、pyenvを併用していた構成も置き換え可能です。

関連記事

資料請求

RELATED POSTS 関連記事