pythonのuvの使い方
概要
- pythonのuvは高速なパッケージ管理ツールで、依存解決エンジンもRust製
- 実行時はPEP 723に対応しており、pythonファイル中のメタデータを参照して依存を解決する
ryeとの差分
- ほぼ同じ機能(add, syncなど)を持つ
- プロジェクト初期化時に
src/project-nameというディレクトリ構造は作成されない requirements.lockのファイルは作成されないが、pyproject.tomlとuv.lockが作成されるのでそのままパッケージとして使用可能
インストール
macOS/Linux
$ curl -LsSf https://astral.sh/uv/install.sh | sh
アップデート
$ uv self update
pythonとパッケージの管理
任意のバージョンのpythonをインストール
$ uv python install 3.10 3.11 3.12 3.13
使用可能なpythonバージョンの確認
$ uv python list
.python-versionファイルにバージョンを指定
$ uv python pin 3.13
パッケージの追加
$ uv add <package-name>
インストールされたパッケージの更新
$ uv sync --upgrade
パッケージのビルド
$ uv build
実行
pythonスクリプトの実行
$ uv run main.py
リモートのpythonスクリプトの実行
$ uv run https://example.com/script.py
- gistのURLも指定可能
pyproject.tomlの例
project.scriptsにコマンドラインツールを登録可能
[project]
name = "your-project-name"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
...
]
[project.scripts]
screenshot = "utils.screenshot:main"
googlesearch = "utils.googlesearch:main"
[tool.uv]
コマンドラインツールの実行
$ uv run screenshot
dockerの設定
Dockerfileの例
FROM python:3.13-slim
# uv の公式 distroless イメージからバイナリをコピー
# Lambda ベースイメージには pip が含まれないため、マルチステージコピーでインストールする
# https://docs.astral.sh/uv/guides/integration/docker/#installing-uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
COPY pyproject.toml uv.lock ./
COPY src/ ./src/
RUN uv pip install --system --no-cache .
CMD sh -c "uv run main.py"