Background Decoration Top Left

Ryeを試してみた

October 21st, 2023

株の取引システムのバグを修正したら、依存関係が壊れてより一層壊れた。 以前poetryとpytorchの噛み合わせが悪く導入を断念して以降、requirements.txtを使っていたが改善しないと辛さがありそうだ。 ということで職場で噂になっていたryeをインストールして使ってみることにした。
Introduction - Rye
faviconrye-up.com
Arrow
導入自体は非常に簡単で、公式サイトに記載されているcurlで一発で入る。 最低限の使い方は以下の通り。

初期化

$ rye init "ディレクトリ名"

pythonのバージョンの固定

$ rye pin 3.12.0

依存関係の追加

$ rye add "パッケージ名"

依存関係の更新

$ rye sync
憶える必要があることは殆ど無いのだが、これまで使ってきたパッケージマネージャーとかなり使い勝手が違う。

仮想環境周りについて

ryeでプロジェクトを初期化すると、そのディレクトリで利用されるpython自体もryeで管理される。 実際にrye pin 3.12.0を打ってみるとvenvが作成され、指定したバージョンのpythonが自動でインストールされる。 プロジェクトのディレクトリでpythonを実行すると、ryeのshimsが自動的にローカルのvenvを指すように管理してくれる。
非常に便利なのだがDockerと組み合わせる際のベストプラクティスがよくわからない。 ryeでパッケージを管理するのであれば、pythonそれ自体もryeが管理してくれるのでpytにon系のベースイメージを使う必要が無くなるはずだ。 Dockerfileとpyproject.toml両方でバージョンを管理するのも手間なのでベースイメージには汎用のやつを使うのがいいかもしれない。
Rye を Docker で使う
faviconzenn.dev
Arrow
link
Rye + Docker · astral-sh/rye · Discussion #239
favicongithub.com
Arrow
link

パッケージの追加に関して

rye addコマンドは実行してもpyproject.tomlに依存関係を追加するだけで、ダウンロードやインストールは行われない。 rye syncを実行するとpyproject.tomlに記載されいている依存関係からlockファイルを生成して、lockファイルに基づいてvenvに必要なパッケージをインストールする。 poetryやyarnと違ってaddしただけではパッケージがインストールされないのは注意しておく必要がある。

ソースコード

Rye自体はRustで書かれている非常にコンパクトなツールだ。 コードベースも小さく、Rustに詳しくなくてもChatGPTを頼れば全然読める分量になっている。 コアとなる依存解決やパッケージのインストールの処理は実質的にpip-toolsのラッパーとして実装されているようだ。 pip-toolsの挙動がわかっていないが既存のエコシステムの延長線にあるラッパーとして実装されているのであれば、rye特有のつらみ、みたいなものも発生しにくそうではある。

おわりに

キャッチアップ含めて数時間で移行できて満足を 今のところ特に不満もないし、今後個人でpythonを使うときはryeで管理しようと思う。

Share this page!

  • X Logo
  • Bluesky Logo
  • Hatena Logo

Next

Arrow

クロス取引を防止するための入札前処理

Previous

Arrow

書評「オンスクリーン タイポグラフィ 事例と論説から考えるウェブの文字表現」