Pythonの次世代のパッケージ・プロジェクト管理ツールであるuvに初めて触れてみました。
自分が後で見返す用の備忘録を残します。
インストール
インストールは以下のコマンドで実行。
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
インストール後、ターミナルを一度閉じて開きなおし、無事uvのインストールを確認。
$ uv --version
事始め
自分なりに調べて、色々試してみた。
基本操作
ターミナルにuvとだけ打って実行すると、uvで実行可能なコマンドと、その解説を一覧で出しくれる。
$ uv
uvでPythonのインストール・アンインストールも可能とのこと
$ uv python install # 最新バージョンのPythonをインストール
特定のPythonのバージョンを指定することも可能
$ uv python install 3.12
取得可能なPythonと、インストールされているPythonの一覧の取得
$ uv python list
仮想環境作成も可能。名前はデフォルトで.venvとしてくれる
$ uv venv
カレントディレクトリのスクリプトの実行。
$ uv run example.py
プロジェクト管理
uvによるプロジェクト管理や、pyproject.tomlファイルから依存関係を定義することができるそう。
新しいプロジェクトの作成。プロジェクトで使用するPythonのバージョンを指定するようにする。
$ uv init hello-world --python 3.12
確かめてみると、.gitignoreやREADME.md、pyproject.tomlなどのファイルが自動で作成されていた。これは便利!
├── .gitignore
├── .python-version
├── README.md
├── main.py
└── pyproject.toml
依存関係の管理
ここからが凄いのだが、addコマンドを使用することで、依存関係をpyproject.tomlに追加し、さらに仮想環境へのインストールまで済ませてくれる。
$ uv add numpy
$ uv add pandas matplotlib seaborn # 一度に複数指定可能
ライブラリのバージョンを指定することも可能。
$ uv add 'numpy==2.4.3'
このバージョン指定は、>や<も使用可能。
$ uv add 'numpy>2.3.0'
ライブラリのバージョンを変更したい場合も、同じようにaddコマンドで行える。
プロジェクト内の特定のライブラリをアップグレード。
$ uv lock --upgrade-package numpy
ライブラリのアンインストール。
$ uv remove numpy
これらのadd、removeコマンドは、それを実行するカレントディレクトリにあるpyproject.tomlを探して、依存関係の管理を行ってくれるそう。
Djangoのアプリケーション開発において、本番環境と開発環境で依存関係を分けて管理したい時にも、uvは使える。
開発環境にのみインストールしたいパッケージは、--devフラグを使用する。
$ uv add django # 本番・開発両方必要
$ uv add --dev pytest # 開発時のみ使用
アンインストール時も同じ
$ uv remove --dev pytest
uvの利点は、そのプロジェクトでどのような依存関係を使用しているのか、pyproject.toml一か所で管理できる点にあるそうだ。
なので、開発時にはrequirements.txtを使用するよりも、uv addコマンドを使用してどんどんライブラリを追加して、管理をuvに任せてしまうのが、効率のいいスマートな使用方法なのである。
感想
pip-toolsが最新だと思っていたのですが、今はもっと便利なものが現れているんですね!
今までuvの事を知らなかったので、調べてみたかいがありました。便利なツールはどんどん使っていきたいと思います。