uv
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
スター履歴
データ取得日時: 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 add、uv removeによる直感的な管理 - 同期機能:
uv syncによるロックファイルからの環境再現 - スクリプト実行:
uv runによる仮想環境の自動管理 - ワークスペース: モノレポのネイティブサポート
Python管理機能
- Pythonインストール:
uv python installで複数バージョン管理 - バージョン固定:
uv python pinでプロジェクトのPythonバージョン指定 - 自動検出: プロジェクトに最適なPythonバージョンを自動選択
- CPython/PyPy対応: 複数のPython実装をサポート
ツール管理機能
- ツールインストール:
uv tool installで分離環境にインストール - ワンオフ実行:
uvx(uv 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