Pythonのパッケージ管理は「rye」が使いやすい！

# 追記

**これからRyeの使用を検討される方は、Rye公式もアナウンスしていますので、uvの使用をお勧めします。**
以下uvの記事を書きましたのでご参考ください

https://qiita.com/ku_a_i/items/be8854553486ee1a640a



# 0. はじめに

以前以下のような記事を書きました。

https://qiita.com/ku_a_i/items/167cb61a60c27031ebce

しかし最近のTwitterの話題を聞きつけて、**これより遥かに使い勝手のいいryeというパッケージ管理を使い始めた**ので自分のコピペ用＋備忘録としてシェアします

- 動作環境
・ OS : Windows10 pro（**記事更新時Windows11 pro**）
・ rye : 0.9.0（**記事更新時0.33.0**）

# 1. ryeとは？

かの有名なPythonのWebアプリケーションフレームワークFlaskを作成したArmin Ronacher氏が作成したPythonパッケージ管理ツールで、**Rust製なので動作がとにかく速い**

https://github.com/mitsuhiko/rye

# 2. 今までの管理ツールとの違い

公式の説明によると**ryeはPython のインストールと管理、pyproject.toml ファイルの管理、依存関係のインストールとアンインストール、virtualenvs の裏側の管理などを行える**とのことです。

私なりに表で色々比較してみました。
Anacondaは正直初心者向けとして使い勝手いいとは思いますが、conda installでライブラリが見つからないことがある等色々使い勝手が悪いことも多く、さらに商用利用で有償化したので私は以前pyenvとpoetryに変更しました。
しかし、**ryeはAnacondaのような悪いとことが無く、さらにpyenvとpoetryの2つを1まとめにしたような使いやすさでした。**

|Pythonバージョン |パッケージ管理|ご利益|点数|
|---|---|---|---|
|素Python  |venv  |PythonだけDLすればOK  |2|
|pyenv  |venv  |Pythonのバージョン管理ができる！  |3|
|pyenv  |poetry  | 依存関係の管理<br>プロジェクト管理ファイル<br>venvの自動作成 |4|
|rye  |rye  | pyenvにpoetryが加わった感じ |5|
|Anaconda  |Anaconda  |初心者にとっつきやすい<br>ただし混ぜるなpip等制約も多い |4|



# 3. ryeの使い方

## 3-1. ryeの導入（Windows）

ドキュメント通り進めればOKです。
https://rye-up.com/

Windowsの場合は以下で導入可能
①rye-x86_64-windows.exe for 64bit Intel Windowsをダウンロード
②☝をインストール(途中にUVか否か選ぶ箇所あるがそのままEnter)
③環境変数PathにC:\Users\\(ユーザー名)\\.rye\shimsを登録し、優先順位を上げる(上に移動で移動させる)
④cmdで`rye`と入力してエラーが出なければOK

**<font color="Red">なお、会社プロキシが噛んでいる場合はryeのデフォルトのGlobalなpythonがインストールできずエラーになります。その場合は以下で対応可能です</font>**

・コントロールパネルから環境変数の変更へ
・プロキシ（HTTP、HTTPS）を環境変数に設定し、Windows再起動
⇒これでプロキシ突破できます

## 3-2. ryeのコマンド

さて、それ以外のryeコマンドを以下にまとめました。
|コマンド  | 内容 |
|---|---|
|rye --version|ryeのバージョン確認|
|rye self update|rye自体のアプデ|
|rye init **|**プロジェクトの作成|
|rye pin (pythonバージョン)|プロジェクトで使用するpythonバージョン(toolchainと呼ばれてる)を指定|
|rye sync|venvがまだなければ作成し、<br>pyproject.toml に基づいて virtualenv を更新|
|rye add ライブラリ|プロジェクトにライブラリを加える<br>(依存関係をプロジェクトに追加)<br>※addの後にsyncしないと書き込まれない|
|rye add "ライブラリ>=2.0"|addのバージョン指定版|
|rye add ライブラリ --git=http://github|gitの依存関係を満たしてadd|
|rye add ライブラリ --path=./myfolder|ローカルの依存関係を満たしてadd|
|rye remove ライブラリ|addした依存関係を再度削除|
|rye run **|ryeで実行可能ファイルを実行する<br>(ex) rye run python --version|
|rye toolchain list|すでにpinでDLされてるPython(toolchain)一覧|
|rye toolchain list --include-downloadable|どのPython(toolchain)がpinコマンド可能か？の一覧|
|rye toolchain remove cpython@(version)|導入済のtoolchain(version)の削除|
|rye show|プロジェクト情報を確認|
|~~rye shell~~|venvを有効にする<br>※.venv\Scripts\activateに変更されました|
|rye list|add/syncしたライブラリ一覧表示|
|rye build|配布用のパッケージをビルド|


## 3-3. ryeの使い方サンプル

**<font color="Red">3-1まで終わってる段階から</font>**
今回はpandasとjupyterを使って検証をする場合を想定。
※以下のフォルダに「sample_project」というプロジェクトを作成する

![スクリーンショット 2023-07-01 131126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/9af38fef-1634-9f1a-d7d6-b6633aba99f9.png)


⓪cmdを開き、`cd C:\Users\user_name\Desktop\sample_folder`で移動
①`rye init sample_project && cd sample_project`でプロジェクト作成しcdで移動
②`rye toolchain list --include-downloadable`で使用可能なバージョン確認
③`rye pin 3.10.11` でプロジェクトで使用するtoolchain(例では3.10.11)を指定（まだなければ勝手にDL、.python-versionファイルが上書きされる）
⑤`rye add ipykernel pandas`で使うライブラリ(例ではipykernelとpandas)をaddする
⑥`rye sync`でvenvを作成しaddを適応させる

すると以下のようになっており、lockファイルを開くと追加されたライブラリ達が確認できる。

![スクリーンショット 2023-07-01 131706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/53ab67cf-a013-3415-4841-771571a313d8.png)

さらにお試しで`rye run python --version`を実行するとpinで指定した3.10.11が使えていることもわかる。

![スクリーンショット 2023-07-01 131913.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/f3e7beb8-1a61-3a71-acc6-0ff7353c79f8.png)


# 4. おわりに

どうだったであろうか？
**pyenv+poetryの時は「pyenv local ●●」でまずpythonバージョンを指定し、それからpoetry initでvenv作成して・・とほんの少し面倒**でしたが、**ryeなら全て完結する**ことがお分かりいただけたと思います。
さらにRUST製だからかpoetryよりもだいぶ**高速だと感じました**

これからはこれがベストプラクティスになり、パッケージ管理競争が終結することを望みます（笑）


# 5. 追記（Pytorchの導入）
Pytorchを導入するにはどうするの？ということに言及しておく。
一度venvを作成した後に、以下のように**pyproject.tomlを開き[[tool.rye.sources]]を新規でtorchのURLを記載すればいい。**

**要するに外部からここのURLを参照してね！ということを宣言するのである**

自分のCUDAはnvidia-smiコマンドで調べ、以下のページでそのCUDAに該当するバージョンを探す(私の場合はCUDA12.3ですが、以下URLでは12.1しか存在しないので12.1だと認識しておく)
https://pytorch.org/get-started/previous-versions/

で、そのCUDAのpytorchは以下のようにURL末尾にバージョンを指定する（私はCUDA12.1なので121）
https://download.pytorch.org/whl/cu121
https://download.pytorch.org/whl/cpu ※CPUならこれ

```CMD:pyproject.toml
↓ ★追記★

[[tool.rye.sources]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cu121"
```

**で、後は`rye add torch torchvision torchaudio`で無事にaddし、`rye sync命令`をすれば無事に導入されるはずである。**

https://github.com/astral-sh/rye/commit/3d5798f2804ac2a179a2119a1bea95b880b428b7

https://rye-up.com/guide/faq/


# 6. 追記2（Rye+uv）

**<font color="Red">※最新のRyeをインストールしたらデフォルトでONになっているかもです</font>**

**Astral社が最近「uv」というパッケージ管理ツールをリリース**したようです。これもRUSTで高速だそうですが、これらは統合していくようです。
Windowsにも正式に対応したらしいので、これを使わない手はないと思います。
**<font color="Red">というか使ったら爆速でsync（add）できるので有効にしない手はないです。必ずこの設定は有効にしましょう！！</font>**


```CMD:
rye self update ← ★ryeのアプデ★

↓ ★uvモードを有効にする★

rye config --set-bool behavior.use-uv=true
```

なお、rye --versionでuvがONしてるか確認可能


### ＜参考＞

https://lucumr.pocoo.org/2024/2/15/rye-grows-with-uv/

https://github.com/astral-sh/rye/issues/668

https://rye-up.com/guide/config/#shims

https://methane.hatenablog.jp/entry/2024/02/21/uv%E3%81%A8Rye