uv
https://gyazo.com/e8c47d0f7bc4ffe56c6b2c1769e6e46b
基本説明・特徴
pythonのパッケージ管理ツールかつバージョン管理ツール
pip、pip-tools、pipx、poetry、pyenv、virtualenvの機能が単一バイナリで提供されている
rust で書かれており pythonのcargoを目指している
Python版のyarnみたいなもの。
pipやpipxの代替
インストール(Windows)
シェルの自動補完
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
データ容量を減らしたい場合は必要に応じて実行
パスを追加
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
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []
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 {パス}
モジュールアクセス
ディレクトリ構造を気にせずにモジュールをimportできる機能。
Poetryの[tool.poetry]のpackagesと近いことができる設定です。
code:pyproject.toml
CUDA依存のPyTorchをインストールするためのextra-index-urlの設定
code:pyproject.toml
find-links = [
]
追加後に以下のコマンドでCUDA依存のPyTorchをインストールすることが可能
$ uv add "torch==2.4.0+cu121"
Dockerやpre-commit, GithubActionsとの統合
公式に詳しい説明が載せられている
タスクランナー
Ryeにはあるがuvには現状無い。
しかし、どうせ実装されるしtaskipyライブラリとかを使えば同じことができるので心配いらない。
参考文献: