uv
https://gyazo.com/e8c47d0f7bc4ffe56c6b2c1769e6e46b
基本説明・特徴
pythonのパッケージ管理ツールかつバージョン管理ツール
pip、pip-tools、pipx、poetry、pyenv、virtualenvの機能が単一バイナリで提供されている
rust で書かれており pythonのcargoを目指している
Python版のyarnみたいなもの。
pipやpipxの代替
poetryのようにPythonプロジェクトの管理ができる
pyenvのようにpython自体の管理もできる
インストール(Windows)
https://docs.astral.sh/uv/getting-started/installation/#installation-methods
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
シェルの自動補完
code:powershell
Add-Content -Path $PROFILE -Value '(& uv generate-shell-completion powershell) | Out-String | Invoke-Expression'
インストール(Unix/WSL2)
$ sudo apt -y update
ローカルパッケージインデックスの更新
-yオプションはYesNoの質問に自動的にすべてYesと答える
$ sudo apt -y upgrade
ポイントリリースの適用(アップデート)
$ sudo apt -y autoremove
データ容量を減らしたい場合は必要に応じて実行
$ curl -LsSf https://astral.sh/uv/install.sh | sh
パスを追加
code:sh
echo 'source $HOME/.cargo/env' >> ~/.bashrc
source ~/.bashrc
バージョン確認
uv --version
uvのセルフアップデート
$ uv self update
uvのアンインストール
$ rm ~/.cargo/bin/uv ~/.cargo/bin/uvx
バイナリを削除するだけで良い
シェルの自動補完:自分が使用しているシェルに応じて変更する
code:sh
# Determine your shell (e.g., with echo $SHELL), then run one of:
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc
echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc
echo 'uv generate-shell-completion fish | source' >> ~/.config/fish/config.fish
echo 'eval (uv generate-shell-completion elvish | slurp)' >> ~/.elvish/rc.elv
新規にプロジェクトを立ち上げる場合の使い方
いわゆるプロジェクトマネジメント。Poetry的な機能
$ uv init example -p 3.10
pythonバージョンもここで指定できる。
もちろんpyproject.tomlのrequires-pythonを書き換えて uv sync でもOK
以下のファイルが生成される
code:tree
example
├── pyproject.toml
├── README.md
└── src
└── example
└── __init__.py
pyproject.tomlも以下のように生成される
code:pyproject.toml
project
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []
build-system
requires = "hatchling"
build-backend = "hatchling.build"
パッケージ管理
追加
$ uv add numpy
$ uv add numpy --dev
$ uv add -r requirements.txt # も可能
削除
$ uv remove numpy
指定したバージョンのPythonを起動する
$ uv run --python 3.10 -- python
ただ、プロジェクトの場合は、自動で必要なバージョンのPythonが検知してインストールされます。
仮想環境を構築するuv venvコマンドを実行すると、pyproject.tomlのrequires-pythonを指定に従って自動でインストールされます。
$ uv venv
仮想環境だけを作成するコマンドで、既に仮想環境がある場合は上書きする。
パッケージの同期
$ uv sync
.venvが作成され、uv.lockが作成される。
すべてのパッケージを再インストールするなら uv sync --reinstall
実行
$ uv run main.py
仮想環境を有効化せずともこれで実行可能。
.venvはprojectのrootに設定される。
pythonのバージョン指定方法
いわゆる、ツールマネジメント。pyenv的な機能。
$ uv python install 3.10
Pythonバージョン変更
$ uv python pin 3.10
これで事後的に変更することもできる。
init時に指定する
$ uv init my-project-3.10 -p 3.10
ファイルを書き換えて指定する
pyproject.tomlのrequires-python = ">=3.10,<3.11"のように書き換えてuv syncで更新する
ツール呼び出し uvx
uvをインストールしたときにuvxが同梱されているので、ツールを実行できる。
uv tool runのエイリアスで、インストールせずに使う npx のようなイメージ
uvxコマンドはツールをインストールせずに呼び出せる
例えばlinter+formatterであるruffを呼び出すことができる
$ uvx ruff
$ uv tool run ruff
と同様
$ uvx ruff@0.3.0 check
バージョン指定した状態で実行できる。
$ uvx ruff@latest check
最新版を実行
頻繁に使用する場合は、繰り返し呼び出すのではなく、永続的な環境にインストールしておくことができる。
ほとんどの場合、uvxツールをインストールするよりも、 コマンドでツールを実行する方が適切
なのであまり使うことはないはず。
code:sh
$ uv tool install ruff
$ ruff --version # ruff 0.6.3
uv tool install でインストールしたものはC:\Users\{ユーザ名}\.local\binに配置されます。
PyPIで利用できないパッケージをインストール
torchなどのgitやlocal wheelのパスからインストール可能
$ uv add {パス}
$ uv add https://files.pythonhosted.org/packages/f7/29/13965af254e3373bceae8fb9a0e6ea0d0e571171b80d6646932131d6439b/setuptools-69.5.1-py3-none-any.whl
モジュールアクセス
ディレクトリ構造を気にせずにモジュールをimportできる機能。
Poetryの[tool.poetry]のpackagesと近いことができる設定です。
code:pyproject.toml
tool.hatch.build.targets.wheel
packages = "src/my_project", "src"
CUDA依存のPyTorchをインストールするためのextra-index-urlの設定
code:pyproject.toml
tool.uv
find-links = [
"https://download.pytorch.org/whl/cu121/torch",
"https://download.pytorch.org/whl/cu121/torchvision",
]
追加後に以下のコマンドでCUDA依存のPyTorchをインストールすることが可能
$ uv add "torch==2.4.0+cu121"
uvでPyTorchのCPU / CUDAバージョンを環境ごとに管理する - Zenn
Dockerやpre-commit, GithubActionsとの統合
https://docs.astral.sh/uv/guides/integration/
公式に詳しい説明が載せられている
タスクランナー
Ryeにはあるがuvには現状無い。
しかし、どうせ実装されるしtaskipyライブラリとかを使えば同じことができるので心配いらない。
参考文献:
uvが良いので今日から暫く使ってみます - Qiita
uvだけでPythonプロジェクトを管理する - Zenn
uvを使ってPython実行環境を整理してみた
Rye × uvでPython環境と機械学習環境を整える - Zenn
uvでPyTorchのCPU / CUDAバージョンを環境ごとに管理する - Zenn
uvとRye - hatenablog