UVの使い方メモ

Python

本記事ではUVの使用方法をメモします。

公式ドキュメントはこちらです。

pipxを使ったインストール方法は以下です。pipx以外のインストール方法は公式ドキュメントのインストールのセクションをご確認ください。

pipx install uv

特定のバージョンのPythonをインストールするには以下を実行します。

uv python install 3.12

プロジェクトでPythonバージョンを固定するにはpinを実行します。

uv python pin 3.12

すると、.python-versionが作成され、Pythonバージョンが保存されます。

venvコマンドで環境を作成します。

uv venv

その後、次のコマンドで仮想環境を有効化できます。

source .venv/bin/activate

uv initでプロジェクトを初期化します。

uv init uv-test
cd uv-test

初期化すると、以下のディレクトリ構成でファイルが作成されます。

uv-test
├── main.py
├── pyproject.toml
└── README.md

pyproject.tomlは以下のようになっています。

# pyproject.toml

[project]
name = "uv-test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

ライブラリを追加するにはuv addを実行します。

uv add pandas

開発環境のみにライブラリを追加するにはdevオプションをつけます。

uv add --dev pytest

パッケージを削除したいときはuv removeを使います。

uv remove pytest

pyproject.tomlでライブラリのバージョン指定を追加する場合、以下を参考に追記します。

[project]
name = "albatross"
version = "0.1.0"
dependencies = [
  # Any version in this range
  "tqdm >=4.66.2,<5",
  # Exactly this version of torch
  "torch ==2.2.2",
  # Install transformers with the torch extra
  "transformers[torch] >=4.39.3,<5",
  # Only install this package on older python versions
  # See "Environment Markers" for more information
  "importlib_metadata >=7.1.0,<8; python_version < '3.10'",
  "mollymawk ==0.1.0"
]

uvは uv pip コマンドで、pip互換のインターフェースを提供しています。そのため、以下のコマンドでインストールされているライブラリの一覧を確認できます。

uv pip list

uv.lockに従い、プロジェクトの全てのライブラリをインストールするにはuv syncを実行します。

uv sync

# 開発環境の依存関係を除外してインストールするとき
uv sync --no-dev

uvを使ったDockerfileの作成例は以下の通りです。

なお、公式ドキュメントの関連箇所はこちらです。

FROM python:3.12 AS builder

# install uv
COPY --from=ghcr.io/astral-sh/uv:0.7.19 /uv /uvx /bin/

# use the system Python environment
ENV UV_PROJECT_ENVIRONMENT="/usr/local/"

WORKDIR /sample
COPY pyproject.toml uv.lock ./
RUN uv sync --locked --no-cache --no-dev


FROM python:3.12-slim-bookworm AS runner

RUN apt-get update && apt-get upgrade -y

COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages

COPY app/ /sample/app/

WORKDIR /sample
CMD ["echo", "sample"]

上記では、builderイメージでuvを使ってライブラリをインストールした後、runnerイメージにライブラリをコピーしています。

また、仮想環境を作らず直接仮想環境でない Python の環境にライブラリをインストールしています。これは、Poetryの時に virtualenvs.create false を指定していたのですが、なるべくその時のコードを流用したく同様のことを行いたかったためです。

プロフィール
この記事を書いた人

30代半ばで未経験でプログラマーに転職し、日々奮闘中です
プログラミング、AI、NLP、キャリア関連などで少しでも役に立てる情報を発信していきます

ユウをフォローする
Python
ユウをフォローする

コメント

タイトルとURLをコピーしました