uv

初めは、Windowsでは
pipや
venvが遅いので、uvを使うことにしました。

uv-0.3 でPythonの自動インストールに対応したのでtoxでのテストが捗りました。パッケージ管理もできるようになった

uv-0.4 では配布しないプロジェクトのパッケージ管理も扱えるようになった
Python-3.14 対応
動的バージョンはuv.lockから除外
動的バージョンをuv.lockから除外する処理(0.15.19)のバグ修正
基本
> Rust で書かれた非常に高速な Python パッケージインストーラとリゾルバ。pipとpip-compileを置き換えるものとして設計されています。
> uvは、Ruffの開発者であるAstralの支援を受けています。
> ⚖️ 一般的な pip、pip-tools、virtualenv コマンドのドロップイン置き換え。
> ⚡️ pipおよびpip-tools(pip-compileおよびpip-sync)より10-100倍高速。
> 💾 依存性の重複排除のためのグローバルキャッシュにより、ディスクスペースが効率的。
> uv は静的バイナリで、Rust や Python なしでインストールできます。
> 🧪 上位 10,000 の PyPI パッケージに対してアットスケールでテスト済み。
> 🖥️ macOS、Linux、Windows をサポート。
> ᾐ 依存バージョンのオーバーライドや代替解決戦略などの高度な機能。
> ⁉️ 競合追跡リゾルバによるクラス最高のエラーメッセージ。
> 🤝 編集可能なインストール、Git依存性、直接URL依存性、ローカル依存性、制約、ソース配布、HTMLおよびJSONインデックスなど、幅広い高度なpip機能をサポート。
uvはデファクトになるのか?
pep対応速度が速い
実行速度が速い
uvx run ruff
とか、隔離環境を作ってruffをインストールして実行まで、1秒かからない
uv run sphinx-build
もインストールからビルド開始まで1秒かからない
多機能
パッケージング
Pythonインストール (tox-uvが強力)
プロジェクトのパッケージ依存管理
インストール手順
shellcurl -LsSf https://astral.sh/uv/install.sh | sh
uv self update
でアップデートしやすいので独自インストールが楽
uv-0.2
uv pip ...
で今まで通りに操作できる。
つまり、 uv
が pip
コマンドを乗っ取るのではなく、 uv
prefixを付けて使う。
uv venv
がWindowsでめっちゃ速かった。
shellPS C:\Users\shimi\Project\python3\uv> Measure-Command {python -m venv venv1}
TotalSeconds : 21.284732
PS C:\Users\shimi\Project\python3\uv> Measure-Command {uv venv venv2}
Using Python 3.12.0 interpreter at C:\Users\shimi\AppData\Local\Programs\Python\Python312\python.exe
Creating virtualenv at: venv2
Activate with: venv2\Scripts\activate
TotalSeconds : 0.1224727
uv-0.3
uv-0.3 でパッケージ管理やpythonインストールができるようなった!
これによって、 tox-uv が、環境にないpythonのインストールをしてくれたので全バージョンのテストができるようになった!
django-redshift-backend の環境管理をuvに移行
インストールまわり
uv
curl -LsSf https://astral.sh/uv/install.sh | sh
uv self update
したいので、グローバルにインストールした
これまで
devcontainer内にfeaturesで入れてたけど、起動後の環境でバージョン上げる手順で
pipx
が必要になるのを避けたかった
ruff
uv tool install -U ruff
tox + tox-uv
uv tool install -U tox --with tox-uv
パッケージ
これまで devcontainer内はpipでグローバルインストールが良いかと思ってた
今後は、uv sync で.venv内に作る事にした(グローバルにpyprojectから入れるのは面倒そう)
uv sync --extra psycopg2-binary
ビルド & check
uvx --from build pyproject-build --installer uv
uvx twine check dist/*
python自体のインストールもuv速いよ
GitHub Actionsの setup/python@v5
: 16秒
uv python install
+ 170パッケージ: 1.75秒(キャッシュ済み環境)
uv-0.4
uv-0.4 では配布しないプロジェクトのパッケージ管理も扱えるようになった
devcontainer のSphinx-users.jp 環境の起動をuv対応、高速化、最新の知見を反映
ビルド & check
uv build
uvx twine check dist/*
PyPIアップロード
ただし twine check の機能はない
GItHub Actions
setup-uv@v3 が速い
uv-0.5
いずれuv独自のbackendが提供されたらまた検証したい