uv
Astral社(Ruffと同じ開発元)が開発している、Rust製の高速なPythonパッケージ・プロジェクトマネージャー。pip、pip-tools、virtualenv、pyenv、pipx、twine、poetryなど複数の既存ツールを1つのバイナリに統合することを目指している。 #python #rust
主な機能
- Python版管理: 複数のPythonバージョンのインストール・切り替え(pyenv相当)
- プロジェクト管理:
pyproject.tomlベースのプロジェクト初期化、依存解決、uv.lockによるロックファイル管理、ビルド・公開 - スクリプト実行: 単体の
.pyファイルをそのまま実行(後述) - ツール実行:
uvx(uv tool runのエイリアス)で、PyPIパッケージを一時環境にインストールせず即実行(pipx相当) - pip互換インターフェース:
uv pip installなど、従来のpipワークフローをそのまま高速化して使う手段も用意されている
スクリプト内に依存関係を書く方法(PEP 723 インラインスクリプトメタデータ)
pyproject.tomlを作らずに、単一の.pyファイル内に依存関係を埋め込める。PEP 723で標準化された記法で、ファイル先頭に# /// script 〜 # ///のTOMLブロックを書く。
# /// script
# dependencies = [
# "requests<3",
# "rich",
# ]
# requires-python = ">=3.12"
# ///
import requests
resp = requests.get("https://peps.python.org/api/peps.json")
print(resp.json())
- 手打ちせず
uv add --script example.py 'requests<3' 'rich'でこのブロックを自動生成・編集できる uv run example.pyとするだけで、uvが自動的に依存関係を解決した一時環境を作って実行してくれる(pyproject.tomlがあるプロジェクト内でも、このメタデータがあればそちらが優先される)- 依存関係が1ファイルに閉じるので、ちょっとしたスクリプトを配布・共有するのに向いている
shebang経由での直接実行
スクリプトの先頭行に以下のshebangを書いておくと、uv runを打たずに./スクリプト名だけで実行できる。
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx"]
# ///
import httpx
print(httpx.get("https://example.com"))
chmod +xで実行権限を付与すれば、他の実行ファイルと同様に./スクリプト名で起動でき、その際に依存関係の解決・インストールも自動で行われる。envの-Sオプションは、shebang行に複数の引数(uv run --script)をまとめて渡すためのもの。
出典
- uv - Astral Docs
- Getting started | uv - Astral Docs
- Features | uv - Astral Docs
- Running scripts | uv - Astral Docs
- GitHub - astral-sh/uv