Pythonのパッケージ管理「uv」のメモ(随時更新)

# 0. はじめに

以前書いたryeの記事は以下ですがRyeの公式によると、いずれはuvに統合していくとのことなので私もつい最近移行しました。
その時のメモを後で見返すようにここでまとめておきます

https://qiita.com/ku_a_i/items/2cbcc576f44ff759b588

**結論から言うとRyeとuvはほとんど同じ使い勝手でしたでの、<font color="Red">今からRyeを入れようと考えている方は公式アナウンスに従い、このuvの方がいいと感じます</font>**
※ただしRyeの記事のように他の手法との比較はしていませんので、初心者の方はRyeの記事を一通り(実行しなくてもいいので)見ていただいてからの方が少し理解ができるかと思います

公式ドキュメントは以下

https://docs.astral.sh/uv/

https://github.com/astral-sh/uv

- 動作環境
・ OS : Windows11 pro
・ uv : 0.5.5

# 1. インストール

WindowsなのでPowershellを開いて以下のコマンドを実行するだけ

```powershell:powershell
 powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
 ```

インストール完了後に、コマンドプロンプトを起動してuvコマンドを実行し、問題がないことを確認する
```cmd:コマンド プロンプト
uv

- - - (実行結果)- - -
Usage: uv [OPTIONS] <COMMAND>

Commands:
  run      Run a command or script
  init     Create a new project
  ・・略
```

 # 2. 使い方

 - **今回の条件**
・ **プロジェクト名 : sampleプロジェクト**
・ **pythonバージョン : 3.11.1を使う**
・ **ライブラリ : ipykernelとPytorch(cu121)を使う**

☝の条件に合うようにプロジェクトと環境を作成していくのをゴールとします。


 ### 2-1. 今使えるpythonの確認と必要なversionの導入

cmdを開き、以下コマンドで使用できるpythonの一覧を表示
※ここではuv以外のpythonも出てくる(condaとかpyenvとか)ので、uvのみにしたければ`--only-installed`をつければいい（どうやらuvの用意するpython以外も使えるらしい）


```cmd:コマンド プロンプト
; condaとかも含む一覧
uv python list

; 純粋にuvのみの一覧
uv python list --only-installed
```

その後一覧にない場合は自分の必要なpythonを`uv python install ***`でDLする
```cmd:コマンド プロンプト
; uvからpython3.11.1をインストール
uv python install 3.11.1

- - - (実行結果)- - -
Installed Python 3.11.1 in 6.63s
 + cpython-3.11.1-windows-x86_64-none
```

なお、uvからどのバージョンがDLできるかは以下のコマンドで確認可能
```cmd:コマンド プロンプト
uv python list --all-versions
```

### 2-2. プロジェクト作成

cmdを開き、まずはプロジェクトを作成したいディレクトリまでcdで移動しておく。今回はデスクトップのpython_projectというディレクトリの中にsampleというプロジェクトを構築する。

ryeと違い、uvは`uv init project名 -p ***`とここで使用するpythonのバージョンも指定するといい。
※もしここで-pを忘れて`uv init`だけのコマンドをした場合はおそらくその時の最新のPythonに`pyproject.toml`で限定されている為、後で書き換えればいい（書き換えないと古いバージョンは拒否される）

```cmd:コマンド プロンプト
; python_projectフォルダへcd
cd C:\Users\***\Desktop\python_project

; versionを指定してproject作成 & sampleフォルダへcdしておく
uv init sample -p 3.11.1 && cd sample
 ```

### 2-3. ライブラリ導入～torchのGPU起動確認

今回使用するtorch(cuda使用)に関しては少し面倒。

pyproject.tomlを開き、`以下の[tool.uv.sources]以下を使いたいtorchに変換してコピペする ※この例ではCuda12.1なのでcu121(変更は3か所あります) `

**なお、tool.uv.indexだけの記載だとうまくいかないので注意**

```cmd:pyproject.toml
[project]
name = "sample"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11.1"
dependencies = []

[tool.uv.sources]
torch = [
  { index = "pytorch-cu121"},
]

[[tool.uv.index]]
name = "pytorch-cu121"
url = "https://download.pytorch.org/whl/cu121"
explicit = true
```

これで準備ができたので、rye同様addしてsyncすればOK！

```cmd:コマンド プロンプト
; ipykernelとPytorchを依存関係にadd
uv add ipykernel torch

; プロジェクトに同期
uv sync
```
 
これで使いたいライブラリが加わったので、後は仮想環境に入って本当にtorchがGPUを使えるか見てみる

```cmd:コマンド プロンプト
; 仮想環境に入る
.venv\Scripts\activate

; python起動
python

; python起動後はtorchのGPU使えるか確認
import torch
print(torch.cuda.is_available())

- - - (実行結果)- - -
True
```

無事にtorchのGPU確認もとれてますね

**なお、torchはプロジェクトの依存関係を無視する場合は以下のコマンド(uv pip install)だともっと簡単に導入可能だが、uvを使う意味が少し薄れるのでオススメはしない**
`uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121`



#### 2-3-2. 追記

<font color="Red">
どうやら最新のuvではもっと簡単にtorchを入れられることがわかりました
</font>

まずuvのバージョンをアップデートした後に、以下を実行すれば導入できます
CUDAのみらしいですが、自動でバージョン等を自動認識していい感じにtorchを導入してくれます。
簡単な検証ではこっちのほうがだいぶ楽ですね

`uv pip install torch torchvision --torch-backend=auto`

![スクリーンショット 2025-04-21 220a234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/baa37f9d-d17c-47d7-a964-e9442ae2fc53.png)


https://docs.astral.sh/uv/guides/integration/pytorch/#the-uv-pip-interface


### 2-4. uvコマンド集

個人的によく使いそうなやつをまとめておく

|コマンド  | 内容 |
|---|---|
|uv init ***|uvでプロジェクト***を作成（仮想環境venvも自動的に作られます）|
|uv init *** -p 3.10|uvでプロジェクト***を作成しPythonバージョンも指定(例は3.10)|
|uv venv|venvをさくせいｓ|
|uv python list|uvで設定できるなpythonバージョン一覧|
|uv python list --all-versions|uvでDL可能なpythonバージョン一覧|
|uv python pin ***|プロジェクトで使用するpythonのバージョンを指定※ただしrequires-pythonの条件に従う為注意|
|uv add ***|プロジェクトに依存関係を追加|
|uv add "ipykernel==6.29.4"|バージョン指定のadd|
|uv add -r requirements.txt |requirements.txtがある場合のadd|
|uv remove ***|プロジェクトから依存関係を削除|
|uv sync|プロジェクトの依存関係を同期|
|uv run **.py|uvでpythonスクリプト(.py)を実行する|
|uv pip install ***|uvでpipコマンドを実行する|
|uv pip list|uvのpipでインストールされたもの一覧 ※**uv pipを使用してなくても使えます(uv addもこれで確認可能)**|
|uv --version|uvのバージョン確認|
|uv self update|uvを最新バージョンにする|

# 3. さいごに

`正直言うと私が使っている範囲ではryeと使い勝手は変わりません。`
が、今後は統合され、こちらだけアップデートされていくそうなのでこちらに完全に乗り換えます。
**今度こそこれでパッケージ管理争いが完結することを願って**