uv

PythonパッケージマネージャーRust仮想環境プロジェクト管理ツールチェーン

GitHub概要

astral-sh/uv

An extremely fast Python package and project manager, written in Rust.

スター70,583
ウォッチ133
フォーク2,139
作成日:2023年10月2日
言語:Rust
ライセンス:Apache License 2.0

トピックス

packagingpythonresolveruv

スター履歴

astral-sh/uv Star History
データ取得日時: 2025/10/22 04:10

Pythonパッケージ&プロジェクトマネージャー

uv

概要

uvは、Rustで書かれた超高速Pythonパッケージ・プロジェクトマネージャーです。2025年現在、pip、pip-tools、pipx、poetry、pyenv、virtualenv、twineなど複数のPythonツールの機能を単一のツールに統合し、pipの10-100倍の速度向上を実現しています。Astral社が開発し、Ruffと同様に高性能な開発者ツールとして、Python開発のワークフローを革新しています。

詳細

主な特徴

  • 超高速パフォーマンス: Rustで書かれ、並列処理と最適化により圧倒的な速度
  • オールインワンツール: pip、poetry、pyenv、virtualenvなどを置き換え
  • Python管理: Pythonのインストールとバージョン管理を統合
  • プロジェクト管理: ロックファイル、ワークスペース、依存関係管理
  • ツール管理: コマンドラインツールの分離環境での実行
  • 標準準拠: PyPI、requirements.txt、pyproject.tomlと完全互換

パッケージ管理機能

  • 高速インストール: pipの20-100倍高速なパッケージインストール
  • 依存関係解決: 効率的で正確な依存関係の解決
  • ロックファイル: クロスプラットフォーム対応のuv.lockによる再現性
  • キャッシュ機能: グローバルキャッシュによる重複排除
  • 複数ソース対応: PyPI、Git、HTTP、ローカルパッケージをサポート

プロジェクト管理機能

  • プロジェクト初期化: uv initによる新規プロジェクト作成
  • 依存関係管理: uv adduv removeによる直感的な管理
  • 同期機能: uv syncによるロックファイルからの環境再現
  • スクリプト実行: uv runによる仮想環境の自動管理
  • ワークスペース: モノレポのネイティブサポート

Python管理機能

  • Pythonインストール: uv python installで複数バージョン管理
  • バージョン固定: uv python pinでプロジェクトのPythonバージョン指定
  • 自動検出: プロジェクトに最適なPythonバージョンを自動選択
  • CPython/PyPy対応: 複数のPython実装をサポート

ツール管理機能

  • ツールインストール: uv tool installで分離環境にインストール
  • ワンオフ実行: uvxuv tool runのエイリアス)で一時実行
  • 環境分離: 各ツールを独立した仮想環境で管理
  • PEP 723対応: インライン依存関係メタデータを持つスクリプト実行

メリット・デメリット

メリット

  • 圧倒的な速度: インストール、解決、ビルドすべてが高速
  • 統一インターフェース: 複数ツールの学習・管理コスト削減
  • 優れたエラーメッセージ: 明確で解決策を示すエラー表示
  • 再現性の保証: ロックファイルによる環境の完全再現
  • 既存プロジェクト対応: pip、poetryプロジェクトから簡単移行
  • 活発な開発: 頻繁なアップデートと迅速なサポート

デメリット

  • 比較的新しい: 2024年リリースで、エコシステムが発展途上
  • Rust依存: ビルドにRustツールチェーンが必要な場合がある
  • 設定ファイル: pip.confではなくuv.tomlを使用
  • 一部非互換: pipの一部の高度な機能が未実装
  • 企業採用: 大規模プロジェクトでの実績がまだ限定的

参考ページ

書き方の例

プロジェクト管理

# 新規プロジェクトの作成
uv init my-project
cd my-project

# Pythonバージョンの指定
uv python pin 3.12

# 依存関係の追加
uv add fastapi uvicorn
uv add --dev pytest black ruff

# ロックファイルの生成
uv lock

# 環境の同期(ロックファイルから)
uv sync

# スクリプトの実行(仮想環境を自動管理)
uv run python main.py
uv run pytest

パッケージインストール(pip互換)

# pipインターフェースを使用
uv pip install requests numpy pandas

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

# 開発依存関係のインストール
uv pip install -e ".[dev]"

# 特定バージョンのインストール
uv pip install "django>=4.0,<5.0"

# アップグレード
uv pip install --upgrade requests

Python管理

# 利用可能なPythonバージョンを表示
uv python list

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

# 複数バージョンをインストール
uv python install 3.11 3.12 pypy3.10

# プロジェクトのPythonバージョンを固定
uv python pin 3.12

# 特定のPythonで実行
uv run --python 3.11 python script.py

仮想環境管理

# 仮想環境の作成
uv venv

# 特定のPythonバージョンで作成
uv venv --python 3.12

# カスタム名で作成
uv venv myenv

# 仮想環境のアクティベート(自動管理のため通常不要)
source .venv/bin/activate  # Linux/Mac
.venv\Scripts\activate     # Windows

ツール管理

# グローバルツールのインストール
uv tool install ruff
uv tool install black
uv tool install mypy

# ツールの実行
uv tool run ruff check .
uv tool run black --check .

# uvx(エイリアス)を使用した一時実行
uvx ruff check .
uvx --from jupyter-core jupyter --version

# 特定バージョンのツールを実行
uvx --with "ruff==0.1.0" ruff check

プロジェクト設定(pyproject.toml)

[project]
name = "my-project"
version = "0.1.0"
description = "My awesome Python project"
requires-python = ">=3.11"
dependencies = [
    "fastapi>=0.100.0",
    "uvicorn[standard]>=0.23.0",
    "pydantic>=2.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "black>=23.0.0",
    "ruff>=0.1.0",
]

[tool.uv]
dev-dependencies = [
    "pytest-cov>=4.0.0",
    "mypy>=1.0.0",
]

ワークスペース管理

# ルートのpyproject.toml
[tool.uv.workspace]
members = ["packages/*", "apps/*"]

[tool.uv]
constraint-dependencies = [
    "django>=4.2",
    "numpy<2.0",
]
# ワークスペースの同期
uv sync --all-packages

# 特定パッケージでコマンド実行
uv run --package my-app python -m my_app

# ワークスペース全体のテスト
uv run --all-packages pytest

スクリプト実行(PEP 723)

# script.py - インラインメタデータ付き
# /// script
# requires-python = ">=3.11"
# dependencies = [
#   "requests",
#   "rich",
# ]
# ///

import requests
from rich import print

response = requests.get("https://api.github.com")
print(response.json())

# 実行コマンド
# uv run script.py

高速ビルドとパブリッシング

# パッケージのビルド
uv build

# PyPIへのアップロード
uv publish

# テストPyPIへのアップロード
uv publish --repository testpypi