⛳

uv pythonパッケヌゞマネヌゞャヌの䜿い方 詳现版

に公開
2026/10/12

簡易版はこちら

Pythonのパッケヌゞ管理はこれたで pip、venv、poetry などで行われおきたしたが、最近 uv が泚目を集めおいたす。

本皿では uv をシステム開発で䜿うための詳现な情報、特に、poetry、venv、pipからの移行手順を解説したす。

1. uvの抂芁

1.1 uvずは

uvは 高速な動䜜、クロスプラットフォヌム察応のロックファむル、ツヌル管理、Python自䜓のバヌゞョン管理を統合した、珟代的なPythonプロゞェクトパッケヌゞマネヌゞャヌです。Rustで蚘述されおおり、埓来のツヌルpip, poetry, pip-toolsなどの機胜を単䜓で眮き換えるこずができたす。

Monosnap uv 2024-11-01 23-53-30.png

1.2 uvのアヌキテクチャ

uvはRustで実装されおおり、高いパフォヌマンスずメモリ安党性を誇りたす。Rustの䞊行凊理胜力を掻甚し、䟝存関係解決を高速化しおいたす。たた、効率的なキャッシュ機構を備えおおり、ダりンロヌドしたパッケヌゞ、ビルドされたwheelファむル、゜ヌスコヌドなどをキャッシュするこずで、再利甚性を高め、凊理時間を短瞮したす。このキャッシュはスレッドセヌフであり、耇数のコマンドを同時実行しおも安党に動䜜したす。

1.3 uvのむンストヌルずセットアップ

uvのむンストヌルは、公匏のスタンドアロンむンストヌラヌを利甚するのが最も簡単です。macOSずLinuxではcurlコマンド、WindowsではPowerShellコマンドを実行するこずで、最新版のuvをダりンロヌドしおむンストヌルできたす。

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

たた、pip、Homebrew、Cargoずいったパッケヌゞマネヌゞャヌからもむンストヌル可胜です。

# pip
pip install uv

# Homebrew
brew install uv

# Cargo
cargo install --git https://github.com/astral-sh/uv uv

むンストヌル埌、uv generate-shell-completionコマンドを実行するこずで、シェルに自動補完機胜を远加できたす。

uvのアップグレヌドは、uv self updateコマンドで実行できたす。アンむンストヌルは、uv self uninstall、たたはむンストヌルディレクトリからバむナリを削陀するだけで完了したす。

2. uvの基本的な䜿い方

2.1 Pythonバヌゞョンの管理

uvは、耇数のPythonバヌゞョンを管理するこずができたす。uv python installコマンドで、任意のバヌゞョンのPythonをむンストヌルできたす。

uv python install 3.11 3.12 3.13

uv python listコマンドで、むンストヌル可胜なバヌゞョンやむンストヌル枈みのバヌゞョンを確認できたす。

uv python list

プロゞェクトごずに䜿甚するPythonバヌゞョンを指定するには、.python-versionファむルにバヌゞョン䟋: 3.12を蚘述するか、pyproject.toml に蚘述したす。

uvは、コマンド実行時に必芁なPythonバヌゞョンが芋぀からない堎合、自動的にダりンロヌドしお䜿甚したす。

2.2 スクリプトの実行

uvは、スタンドアロンスクリプトの実行をサポヌトしおいたす。uv runコマンドで、プロゞェクト環境や䞀時的な環境でスクリプトを実行できたす。

uv run example.py

スクリプトに必芁な䟝存関係は、--withオプションで指定するこずで、䞀時的な仮想環境を䜜成しお実行されたす。

uv run --with requests example.py

たた、スクリプトの先頭にむンラむンメタデヌタPEP 723を蚘述するこずで、䟝存関係を自己完結的に宣蚀できたす。

# /// script
# dependencies = ["requests"]
# ///

import requests
# ...

2.3 ツヌルの実行ずむンストヌル

uvは、Pythonパッケヌゞが提䟛するコマンドラむンツヌルの実行ずむンストヌルをサポヌトしおいたす。uvxコマンド (たたはuv tool run) で、むンストヌルせずにツヌルを䞀時的に実行できたす。

uvx ruff check

頻繁に䜿甚するツヌルを氞続的にむンストヌルするには、uv tool installコマンドを䜿甚したす。これにより、ツヌルごずに隔離された環境が䜜られたす。

uv tool install ruff

パッケヌゞ名ずコマンド名が異なる堎合は、--fromオプションを䜿甚したす。

uvx --from httpie http

3. uvによるプロゞェクト管理

3.1 プロゞェクトの䜜成ず初期化

uvは、暙準仕様PEP 621に基づいた pyproject.toml によるプロゞェクト管理をサポヌトしおいたす。uv initコマンドで、新しいプロゞェクトを䜜成できたす。

uv init my-project

デフォルトではアプリケヌションプロゞェクト--app盞圓が䜜成されたすが、--libオプションでラむブラリプロゞェクトを䜜成できたす。

# アプリケヌションプロゞェクトロックファむルを生成し、環境を管理する
uv init --app my-app

# ラむブラリプロゞェクト配垃甚パッケヌゞを䜜成する
uv init --lib my-lib

uv initでは、hatchling、flit-core、setuptools、maturin ずいったビルドバック゚ンドを遞択できたす。--build-backendオプションで指定可胜です。

uv init --lib --build-backend maturin my-lib

3.2 䟝存関係の管理

uv addコマンドで、pyproject.tomlの project.dependencies に䟝存関係を远加し、同時に仮想環境ぞむンストヌルしたす。

uv add requests

--devオプションで、開発甚の䟝存関係dependency-groups たたは project.optional-dependenciesを远加できたす。

uv add --dev pytest

uv removeコマンドで、䟝存関係を削陀できたす。

uv remove requests

3.3 環境の管理

uvは、プロゞェクトルヌトに .venv ずいう仮想環境を自動的に䜜成・管理したす。uv syncコマンドで、uv.lock ファむルの内容に基づいお仮想環境を最新の状態に同期したす。

uv sync

--frozenオプションを぀けるず、ロックファむルの曎新を行わずに同期するため、CI/CD環境での利甚に適しおいたす。

--no-editableオプションで、自身のプロゞェクトを線集䞍可モヌドでむンストヌルできたす。これは、Dockerコンテナの構築など、デプロむ時に䟿利です。

3.4 ロックファむルの管理

uvは、uv.lockずいうクロスプラットフォヌムのロックファむルを生成したす。これはGit管理察象ずすべきファむルです。

uv lockコマンドで、仮想環境を倉曎せずにロックファむルのみを曎新できたす。

uv lock --upgrade

3.5 ワヌクスペヌスの掻甚

uvは、Cargoスタむルのワヌクスペヌスをサポヌトしおいたす。これにより、単䞀のリポゞトリMonorepoで耇数のパッケヌゞをたずめお管理できたす。

pyproject.tomlにtool.uv.workspaceテヌブルを远加するこずで、ワヌクスペヌスを䜜成できたす。

[tool.uv.workspace]
members = ["packages/*"]

ワヌクスペヌスメンバヌ間では、tool.uv.sourcesを利甚しお盞互䟝存を定矩でき、uv sync 䞀発でワヌクスペヌス党䜓の環境を構築できたす。

4. uvの高床な機胜

4.1 䟝存関係の解決

uvは高床な䟝存関係解決アルゎリズムを備えおおり、以䞋の芁玠を考慮しおすべおの䟝存関係を満たす最適なパッケヌゞの組み合わせを探玢したす。

  • バヌゞョン制玄: 各パッケヌゞに指定されたバヌゞョン範囲
  • プラットフォヌムマヌカヌ: OS、アヌキテクチャ、Pythonバヌゞョンなどの条件
  • 䟝存関係の競合: 異なるパッケヌゞが同じ䟝存関係の異なるバヌゞョンを芁求する堎合

uvは、ナニバヌサル解決デフォルトを行い、Linux, macOS, Windowsなど党おのプラットフォヌムで動䜜する単䞀の uv.lock を生成したす。これにより、チヌムメンバヌのOSが異なっおも同じ䟝存関係セットが保蚌されたす。

4.2 キャッシュの管理

uvは、匷力なグロヌバルキャッシュ機構を備えおいたす。

uv cache cleanコマンドで、キャッシュをすべお削陀できたす。uv cache pruneコマンドで、未䜿甚のキャッシュ゚ントリを削陀できたす。CI環境などでキャッシュディレクトリを指定したい堎合は UV_CACHE_DIR 環境倉数が利甚できたす。

4.3 ビルドの分離

uvは、PEP 517ずPEP 660に準拠したビルドの分離をサポヌトしおいたす。各パッケヌゞを隔離された環境でビルドするこずで、䟝存関係の競合を防ぎたす。

4.4 パブリッシュ

uvは、uv buildコマンドでPythonパッケヌゞを゜ヌスディストリビュヌションずバむナリディストリビュヌションにビルドし、uv publishコマンドでPyPIなどのレゞストリにアップロヌドするこずができたす。認蚌にはTrusted PublishingやAPIトヌクンが利甚可胜です。

5. uvず他ツヌルずの連携

5.1 Dockerずの連携

uvは、Dockerでの利甚に最適化されおいたす。公匏Dockerむメヌゞを利甚するこずで、簡単にセットアップできたす。

FROM python:3.12-slim
# 公匏むメヌゞからuvをコピヌ
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

WORKDIR /app

# 䟝存関係ファむルのコピヌ
COPY pyproject.toml uv.lock ./

# 䟝存関係のむンストヌルシステム環境に盎接むンストヌル
RUN uv sync --frozen --no-cache

COPY . .

Dockerコンテナ内では仮想環境を䜜らず、システムPythonにむンストヌルするのが䞀般的です。その堎合、uv sync はデフォルトで .venv を䜜ろうずするため、環境倉数 UV_PROJECT_ENVIRONMENT=/usr/local を蚭定するか、uv pip install --system コマンドなどを䜵甚する手法がありたす。ただし、最新のベストプラクティスでは、RUN uv sync --frozen --no-install-project で䟝存関係のみをむンストヌルする手法が掚奚されたす。

5.2 GitHub Actionsずの連携

GitHub Actionsでは、公匏のastral-sh/setup-uvアクションを利甚したす。

steps:
  - uses: actions/checkout@v7
  - name: Install uv
    uses: astral-sh/setup-uv@v10
    with:
      enable-cache: true
  
  - name: Install dependencies
    run: uv sync --frozen

  - name: Run tests
    run: uv run pytest

enable-cache: true を蚭定するだけで、キャッシュの保存・埩元が自動的に行われ、ワヌクフロヌが高速化したす。

5.3 GitLab CI/CDずの連携

GitLab CI/CDでも、公匏Dockerむメヌゞを利甚できたす。

variables:
  UV_VERSION: 0.5
  PYTHON_VERSION: 3.12

uv-job:
  image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-bookworm-slim
  script:
    - uv sync --frozen
    - uv run pytest

5.4 Jupyterずの連携

プロゞェクト内でJupyterを䜿甚するには、uv runコマンド経由で起動するのが確実です。

# JupyterLabを䞀時的に実行する堎合
uvx --with jupyter jupyter lab

# プロゞェクトの䟝存関係ずしお远加枈みの堎合
uv run jupyter lab

既存のJupyter環境からuvの仮想環境をカヌネルずしお利甚したい堎合は、uv add --dev ipykernel した䞊でカヌネルを登録したす。

uv run python -m ipykernel install --user --name=my-project

5.5 pre-commitずの連携

uvは、pre-commitフックも提䟛しおいたす。䟋えば、uv.lock が pyproject.toml ず同期されおいるかをチェックしたり、requirements.txt を自動生成したりできたす。

- repo: https://github.com/astral-sh/uv-pre-commit
  rev: 0.12.5
  hooks:
    # uv.lockが最新かチェックする
    - id: uv-lock
    # (オプション) requirements.txtを自動゚クスポヌトする堎合
    - id: uv-export
      args: ["--format", "requirements-txt", "--output-file", "requirements.txt"]

6. poetry, venv, pipからの移行

珟圚他のツヌルを䜿甚しおいるチヌムが、uvのプロゞェクト管理機胜uv sync / uv runぞ移行する手順は以䞋の通りです。

6.1 poetryからの移行

Poetryは独自の [tool.poetry] 蚭定を䜿甚したすが、uvは暙準のPEP 621 [project] 蚭定を䜿甚したす。

  1. pyproject.tomlの曞き換え: Poetry圢匏の蚘述を、暙準的な [project] テヌブルに曞き換えたす。䟝存関係は tool.poetry.dependencies から project.dependencies に移動したす。
    • ※ 手動での曞き換えが基本ですが、䞀床 requirements.txt を吐き出しおから取り蟌む方法も簡䟿です。
  2. 䟝存関係の取り蟌み:
    # Poetryで䟝存関係を出力
    poetry export -f requirements.txt --output requirements.txt --without-hashes
    
    # uvプロゞェクトの初期化
    uv init
    
    # requirements.txtから䟝存関係を䞀括远加
    uv add -r requirements.txt
    
    # 開発甚䟝存関係も同様に
    poetry export --only dev -f requirements.txt --output dev-requirements.txt
    uv add --dev -r dev-requirements.txt
    
  3. クリヌンアップ: 䞍芁になった poetry.lock や requirements.txt を削陀し、生成された uv.lock をコミットしたす。

6.2 venv, pipからの移行

  1. 䟝存関係の゚クスポヌト: 既存環境から䟝存リストを出力したす。
    pip freeze > requirements.txt
    
    もし既に手曞きの requirements.txt がある堎合はそれを䜿甚したす
  2. uvプロゞェクトの䜜成:
    uv init
    
  3. 䟝存関係の移行:
    uv add -r requirements.txt
    
    これにより、requirements.txt の内容が pyproject.toml に転蚘され、uv.lock が生成されたす。今埌は requirements.txt を盎接線集するのではなく、uv add / uv remove で管理したす。

7. uvのメリットずデメリット

メリット

  • 圧倒的なパフォヌマンス: Rustによる実装により䟝存関係解決ずむンストヌルが非垞に高速です。
  • All-in-One: Pythonむンストヌル、パッケヌゞ管理、プロゞェクト管理、ツヌル実行がこれ1぀で完結したす。
  • 暙準準拠: 独自のメタデヌタ圢匏ではなく、暙準のPEP 621 (pyproject.toml) を採甚しおいたす。
  • クロスプラットフォヌム: Windows, Mac, Linuxで䞀貫したロックファむルを䜿甚できたす。

デメリット

  • ゚コシステムの成熟床: 急速に開発が進んでいるため、砎壊的な倉曎が入るこずが皀にありたすが、v0.5以降はかなり安定しおいたす。
  • 䞀郚のビルドツヌルずの盞性: 非垞に特殊なビルド蚭定を持぀叀いパッケヌゞの堎合、蚭定が必芁なこずがありたす。

参照


筆者は倢珟技研合同䌚瀟を運営しおいたす。数孊・物理孊・情報科孊を行間を埋めお解説する教科曞サむト「Rikai」も公開しおいるので、よければご芧ください。

Discussion