python
株の取引システムのバグを修正したら、依存関係が壊れてより一層壊れた。 以前poetryとpytorchの噛み合わせが悪く導入を断念して以降、requirements.txtを使っていたが改善しないと辛さがありそうだ。 ということで職場で噂になっていたryeをインストールして使ってみることにした。
導入自体は非常に簡単で、公式サイトに記載されているcurlで一発で入る。 最低限の使い方は以下の通り。
$ rye init "ディレクトリ名"
$ 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両方でバージョンを管理するのも手間なのでベースイメージには汎用のやつを使うのがいいかもしれない。
https://zenn.dev/codehex/scraps/7cc3970a8c8048 https://github.com/mitsuhiko/rye/discussions/239#discussioncomment-6033855
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で管理しようと思う。