Open1
uvでPythonのバージョンに合わせてインストールするライブラリのバージョンを変える

Pythonのパッケージ管理ツールのuvには、PEP 508に基づいたDependency specificationの記述が可能です。
例えば、uvでPyTorchをインストールする場合はenvironment marker expressionの記法で、Linuxかそれ以外のOSかでインストールするPyTorchのindexを変更することが可能です[1]。
pyproject.toml
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.6.0",
"torchvision>=0.21.0",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
torchvision = [
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
このマーカー式を用いることで、Pythonのバージョンごとのインストールするパッケージのバージョンを記述することができます。
実際に、Python 3.11であればnumpy<2.00
、Python 3.12以上であればnumpy>=2.0.0
をインストールするように記述してみましょう。
pyproject.toml
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"numpy<2.0.0 ; python_version == '3.11'",
"numpy>=2.0.0 ; python_version >= '3.12' "
]
uv python pin 3.11
でPythonのバージョンを変更した後にuv sync
をするとnumpy==1.26.4
がインストールされ、uv python pin 3.12
の後にuv sync
をするとnumpy==2.2.5
がインストールされることが確認できます。
なお、この記事でのuvのバージョンはv0.6.14
です。