0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uv (pythonパッケージマネージャー)の使い方 簡易版

Last updated at Posted at 2024-11-01

詳細版はこちら

読者が uvをシステム開発にすぐに応用できることを目指します。

-1. なぜ uv なのか

  • 名前の由来は UniVerse (宇宙!) とか UltraViolet (紫外線)とかっぽいんですが、実際のところ何が由来なのかわかりませんでした(参照
  • pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv といった従来のパッケージマネージャーを置き換えることができる!
  • 公式曰く、extremely fast なパッケージマネージャーということで、 pip の 10 ~ 100 倍高速だそうです。poetry よりも15倍くらい早い!これは使うしかありませんね?

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

0. uvの基本的な使い方 (インストール済みという前提で)

uvの使い方は超簡単です。以下は、最も基本的な使い方の流れです。

新規プロジェクトの作成

uv init my-ml-project

依存関係の追加

uv add scikit-learn pandas matplotlib

スクリプトの実行

uv run my_ml_script.py

0.1. 使用感は poetry に似ているが、uvのメリットは大きい

uvの uv init, uv add, uv run という基本的なコマンドの流れは poetry に似ています。

poetryも、poetry new, poetry add, poetry run というコマンドで、プロジェクトの作成、依存関係の追加、スクリプトの実行を行います。

poetryは、依存関係の管理、仮想環境の管理、build、publish など、Pythonパッケージの開発に必要な機能を包括的に持っており、uvも同様の機能を備えています。

ただし、uvはpoetryよりも高速な動作、クロスプラットフォーム対応のロックファイル(素晴らしい...)、ワークスペースによる複数パッケージの管理など、いくつかの点で優位性があるそうです。

(poetry は linux系と windows でlockファイルの互換性が全然なかったりしましたがuvはどうなんでしょうね?未調査です)

uvは uv pip コマンドで、pip互換のインターフェースを提供しており、pipに慣れたユーザーはスムーズに移行することができます。

一方、poetryは豊富なドキュメント、活発なコミュニティなど成熟したパッケージマネージャーであり、安定性があります。

最終的にどちらのパッケージマネージャーが適しているかはいまのところ開発チームの好みでいい気がします。

1. uvのインストールとセットアップ

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
pip install uv
  • Homebrew (macOS)
brew install uv
  • Cargo
cargo install --git https://github.com/astral-sh/uv uv

インストール後、uv generate-shell-completion を実行してシェルに自動補完機能を追加することをお勧めします。

2. uvの基本的な使い方

uvのコマンド体系はシンプルで、直感的に操作できます。

  • uv add: 依存関係を追加
  • uv remove: 依存関係を削除
  • uv sync: 環境を最新の状態に同期
  • uv run: スクリプトを実行
  • uv lock: ロックファイルを更新

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

uvは、pyproject.toml で定義されたPythonプロジェクトを管理できます。

  • uv init: 新規プロジェクトを作成
  • uv add: 依存関係を追加
  • uv remove: 依存関係を削除
  • uv sync: 仮想環境を更新

プロジェクトの例

[project]
name = "my-ml-project"
version = "0.1.0"
requires-python = ">=3.8"
dependencies = [
    "scikit-learn",
    "pandas",
    "matplotlib",
]

[tool.uv.sources]
# 必要に応じて、Gitリポジトリやローカルパスなど、
# さまざまなソースからの依存関係を指定できます。

4. Dockerとの連携

uvはDockerとの連携が容易で、コンテナ化された機械学習アプリケーションの開発を効率化します。

Dockerfileの例

FROM python:3.9-slim

# uvをインストール
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# プロジェクトをコピー
COPY . /app
WORKDIR /app

# 依存関係をインストール
RUN uv sync --frozen

# アプリケーションを実行
CMD ["uv", "run", "main.py"]

5. GitHub Actionsとの連携

uvは、GitHub Actionsと連携して、CI/CDパイプラインに統合できます。

workflowの例

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install uv
        uses: astral-sh/setup-uv@v3
      - name: Install dependencies
        run: uv sync --dev
      - name: Run tests
        run: uv run pytest

6. Jupyterとの連携

uvは、Jupyter Notebookと連携して、インタラクティブな機械学習開発をサポートします。

Jupyter Notebookでの使用例

# Jupyter Labを起動
uv run --with jupyter jupyter lab

# Notebook内でパッケージをインストール
!uv add pydantic

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

既存のpoetry, venv, pipプロジェクトをuvに移行するのは簡単です。

poetryからの移行

  1. pyproject.toml をuvの形式に変換します。
  2. poetry export -f requirements.txt --output requirements.txt で依存関係をエクスポートします。
  3. uv pip install -r requirements.txt でuv環境に依存関係をインストールします。

venv, pipからの移行

  1. pip freeze > requirements.txt で依存関係をエクスポートします。
  2. uv venv で新しい仮想環境を作成します。
  3. uv pip install -r requirements.txt で依存関係をインストールします。

参照

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?