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)をまとめて渡すためのもの。

出典

作成日時: 2026-08-14 18:37 / 更新日時: 2026-08-14 18:37