はじめに #
Pythonのパッケージ管理ツールuvの使用方法を解説するシリーズの第3段です。 uvでサードパーティ製ライブラリのバージョンをアップデートする方法を解説します。
Pythonのソフトウェアを長期間開発していると、サードパーティ製ライブラリのアップデートが必要となります。 この記事の前提として、uvで既に仮想環境を作成しているものとします。
検証環境は以下の通りです。
- Windows 10 Home 22H2
- uv 0.8.22
この記事では、uvの以下のコマンドについて解説します。
uv sync -U
またはuv sync --upgrade
: ライブラリをアップデートする。uv sync -U --dry-run
: ライブラリをアップデートせずに、アップデート可能なライブラリを表示する。uv tree --outdated
: ライブラリの最新バージョンを表示する。
事前の準備 #
最初に、ライブラリのバージョンを記述したpyproject.toml
において、バージョンを完全に固定していないことを確認します。
例えば、
[project]
dependencies = [
"ruff==0.12.11",
]
となっている場合、
[project]
dependencies = [
"ruff>=0.12.11",
]
のように変更します。
更新可能なライブラリの確認 #
まずはライブラリを更新せずに、更新可能なものがあるか確認します。
pyproject.toml
があるディレクトリでコマンドuv sync -U --dry-run
を実行します(-U
は--upgrade
に変更可能)。
すると、以下のように更新されるライブラリが表示されます。
> uv sync -U --dry-run
Would use project environment at: .venv
Resolved 2 packages in 209ms
Would update lockfile at: uv.lock
Would download 1 package
Would uninstall 1 package
Would install 1 package
- ruff==0.12.11
+ ruff==0.13.2
ここではruff
が0.12.11から0.13.2に更新可能と表示されています。
ライブラリの更新 #
ライブラリの更新内容に問題がなければ、--dry-run
オプションを外し、uv sync -U
コマンドを実行して更新します。
> uv sync -U
Resolved 2 packages in 68ms
Prepared 1 package in 782ms
Uninstalled 1 package in 28ms
Installed 1 package in 585ms
- ruff==0.12.11
+ ruff==0.13.2
このコマンドを実行すると、仮想環境のライブラリが更新されます。
また、uv.lock
ファイルも更新されます(uv.lock
をGitで管理している場合はコミットします)。
ただし、pyproject.toml
のバージョン番号は更新されません。
uv 0.8.22の時点ではpyproject.toml
のバージョン番号を更新する機能はないようですので、更新する場合は手動で書き換える必要があります。
なお、uv.lock
のバージョン番号は更新されているため、pyproject.toml
を更新しなくても、uv.lock
から他のPCでもライブラリの更新を再現することは可能です。
ライブラリの最新バージョンを表示 #
ライブラリの最新バージョンを確認するには、uv tree --outdated
コマンドを使用します。
以下のようにインストールされたライブラリが一覧表示され、古いものには最新バージョンが(latest: v8.4.2)
のように表示されます。
> uv tree --outdated
Resolved 37 packages in 4ms
rufftest v0.1.0
├── pylint v3.3.8
│ ├── astroid v3.3.11
│ ├── colorama v0.4.6
│ ├── dill v0.4.0
│ ├── isort v6.0.1
│ ├── mccabe v0.7.0
│ ├── platformdirs v4.4.0
│ └── tomlkit v0.13.3
├── pytest v8.4.1 (latest: v8.4.2)
│ ├── colorama v0.4.6
│ ├── iniconfig v2.1.0
│ ├── packaging v25.0
│ ├── pluggy v1.6.0
│ └── pygments v2.19.2
├── ruff v0.12.10 (latest: v0.13.2)
└── matplotlib v3.10.6 (extra: plot)
├── contourpy v1.3.3
│ └── numpy v2.3.2 (latest: v2.3.3)
├── cycler v0.12.1
├── fonttools v4.59.2 (latest: v4.60.0)
├── kiwisolver v1.4.9
├── numpy v2.3.2
├── packaging v25.0
├── pillow v11.3.0
├── pyparsing v3.2.3 (latest: v3.2.5)
└── python-dateutil v2.9.0.post0
└── six v1.17.0
uv tree --outdated
コマンドでは「更新可能か否か」ではなく、単に最新のバージョン番号が表示されることに注意します。
例えば、ruffのインストール可能なバージョンを>=0.12.0, <0.13
とした場合、v0.13.2
は現時点での最新バージョンですが、インストール可能なバージョンではありません。
まとめ #
uv sync -U
またはuv sync --upgrade
: ライブラリをアップデートする。uv sync -U --dry-run
: ライブラリをアップデートせずに、アップデート可能なライブラリを表示する。uv tree --outdated
: ライブラリの最新バージョンを表示する。
参考 #
詳細な使用方法はuvのuv sync --help
やuv tree --help
コマンドで確認できます。