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.11
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip
RUN pip install uv
WORKDIR /app
COPY . /app/
COPY pyproject.toml uv.lock ./
# /usr/local (=Debian 系の Python prefix) に直接インストールさせる
ENV UV_PROJECT_ENVIRONMENT=/usr/local
RUN uv sync --frozen --no-dev --no-editable
CMD sh -c "uv run main.py"