Rye: 手間のかからない Python 体験
(rye.astral.sh)- Rye は、Python のインストール、
pyproject.tomlプロジェクト、依存関係、virtualenv、グローバルツールのインストールを一か所で扱おうとしたプロジェクト・パッケージ管理ツール - 現在は 開発中止 となっており、同じメンテナーたちが作った後継プロジェクト uv の利用が推奨される
- 既存ユーザーは uv migration guide を参考に移行でき、Rye は引き続き利用できるが、これ以上の更新予定はない
- 更新停止には セキュリティアップデート も含まれるため、新規プロジェクトや長期保守環境では uv への移行を検討する必要がある
- Rye が目指していた統合 Python 体験は、複雑なプロジェクトや monorepo まで含んでいたが、メンテナンスの中心は uv に移っている
Rye の現在の状況
-
開発中止と uv 推奨
- すべてのユーザーに uv の利用が推奨される
- uv は同じメンテナーたちが作った 後継プロジェクト である
- uv は活発にメンテナンスされており、Rye よりはるかに広く使われている
- 既存の Rye ユーザーは uv migration guide を参考にできる
- Rye は引き続き利用できるが、追加の更新予定はない
- セキュリティアップデートも予定されていない
Rye が提供していた機能
- Rye は Python 向けの プロジェクトおよびパッケージ管理ソリューション
- Python ユーザー向けのワンストップツールを目指して作られた
- 1 つの統合された体験の中で、次の作業を扱う
- Python インストール管理
pyproject.tomlベースのプロジェクト管理- 依存関係管理
- virtualenv 管理
- グローバルツールのインストール
- 複雑なプロジェクトや monorepo を扱えるように設計されていた
- 紹介動画は Watch an introduction で見られる
2件のコメント
私は少し前から、あれこれ試した末に
Introduction - PDM
を使っています。
Rye も使ってみないといけませんね。
Hacker News の意見
コアなパッケージング開発のかなりの部分はいまや uv で進められており、Rye は内部的に uv を使っているため、uv が良くなれば Rye も一緒に良くなる
たとえば最近 uv に ユニバーサル依存関係解決が追加され、現在実行中のシステムだけでなく、すべてのプラットフォームとオペレーティングシステムで動作する単一の解決結果としてロックされた
requirements.txtを作れるようになり、最新の Rye もこれをサポートしているhttps://github.com/astral-sh/uv
Rye と uv を開発しているので、質問があれば答えられる
https://github.com/python-poetry/poetry/issues/6409
https://news.ycombinator.com/item?id=39257501
私の所属チームが移行をためらっている理由の一つがこの点。ML 作業をしているので PyTorch ベースのプロジェクトを例にすると、望ましい状態は、すべての依存関係を
pyproject.tomlに置き、AArch64 Mac や AMD64 Windows ワークステーションから次のプラットフォーム設定用のロックファイルを生成できること:デフォルトの MPS PyTorch を使う Mac、CUDA PyTorch を使う Windows、CPU PyTorch を使う AArch64 Linux、CPU PyTorch を使う AMD64 Linux、CUDA PyTorch を使う AMD64 LinuxRuff を作ってくれてありがとう。リンティングとフォーマットの両方にとても満足している
pyenv+venv+pipがいつもつらかったが、今は Rye に移行した今では Rye をインストールし、GitHub から取ってきて、
rye syncと入力すれば終わりhttps://guac.sh/
https://pypi.org/project/sbom4python/ https://github.com/CycloneDX/cyclonedx-python
最近追加された依存関係の固定解除機能のおかげで、開発中は互換性を保つよう促しつつ、再現性のために正確で明示的な
requirements.txtを生成できるため、脆弱性管理や SBOM の段階が Poetry のようなツールよりずっと簡単になる似た理由で https://hatch.pypa.io/latest/why/ を使っており、
uvと相性が良い点も気に入っているRye で気が進まなかった点は、非標準の Python ビルドの使用を強く推奨しているところ
哲学ページ(https://rye.astral.sh/philosophy/)では、python.org の CPython ビルドはまったく不十分で、プラットフォームによって
.msiインストーラしかなかったり tarball しかなかったりし、複数の Python ディストリビューションが大きく分岐して下位エコシステムにさまざまな問題を生んでいる、と説明している。そのためこのプロジェクトは indygreg のスタンドアロンビルドを使っており、いつか適切に管理され信頼できる Python ビルドが登場して、現在の混乱を置き換えることを望んでいるというその indygreg ビルドの情報は https://gregoryszorc.com/docs/python-build-standalone/main/ にあり、別の Python を選ぶことも可能:https://rye.astral.sh/guide/toolchains/
ただ、私は彼らが言う問題をほとんど経験したことがない。python.org から入手した公式 Python ビルドも動いたし、ディストリビューションのパッケージマネージャでインストールした普通の Python も動いたし、公式 Docker コンテナイメージに含まれる Python も動いた
その特殊なビルドも問題なく動くだろうが、非標準性のためにためらってしまう。動作上の特異点一覧まであるのに、問題のないものへなぜ特異点を追加するのか分からない。Rye の哲学がそのビルドを使うことにあまりにも積極的なのも、OS にすでにある Python をデフォルトで使う代替手段に比べて魅力を下げている
ソースから Python をビルドしようとすると新しいシステム依存関係が必要で時間もかかり、結局、欠けているヘッダーファイルについてのさらに分かりにくいエラーが出る。そのエラーを検索すると、上流の GCC が 2017 年に修正した問題を回避する
./configureフラグが見つかり、ともかく成功はするこうした3回のエラーや manylinux ビルド環境を経験したことがないなら、苦痛の世界を丸ごと避けてきたということ。Windows のインストールスクリプト作成や、そのページの「使用可能な CPU 命令の制限」のような部分も同じ
Python のソースコードを定期的にダウンロードし、標準的な本番向け最適化でコンパイルしたうえで
/use/local/python${version}にインストールしているが、Python 3.7 が出た 2018 年以降、非常に一貫して動作している私の経験では、これらのコマンドはあまりに安定して一貫しているので、自動化してもよいほどだ。筆者が問題視している点や、根本的な不満が何なのか気になる
たとえば Python 3.10.14 のインストーラーは入手できず、最後の Windows インストーラーは Python 3.10.11、2023 年 4 月 5 日版だ
Rye が好きだ。掲げていることをそのまま実現していて、
venv/Python バージョン/パッケージング全体の流れを実際に快適にし、pyproject.tomlのような公式の Python の使い方に慣れている人にはほとんど透過的に感じられるそのうえ Python を Cargo のように感じさせてくれるし、Cargo も使いやすいツールだ
個人的には、pip-tools は Poetry や Pipenv よりはるかに優れた設計だったと思う。pip と
virtualenvの両方に対して直交的で、そのどちらもすでに Python に長く含まれてきた流れだからだ。Rye は、反復的な改善を経た標準準拠のアプローチが勝つ姿だと言えるRust による速度向上に加えて、仮想環境をどこに置くか(
.venv)と、複数の Python バージョンをどうインストールするかについて適切なデフォルトを与えてくれる点がよい。小さく見えるが、wheel が numpy のインストール問題を解決して以降は、こうした合理的なデフォルトと組み込みの pip-tools が、事実上欠けていたもののすべてだった。その意味で、バイナリ wheel が登場した後に Anaconda の存在理由が何だったのかも気になる今からでも改善しているというのはうれしい
Python のパッケージマネージャーは Google のチャットアプリより多い気がする
それにキュレーションの面では、より大きく古い組織より小さな組織を信頼しろという提案は説得力を持ちにくそうだ。つまり、掲げていることが正確には何なのか気になる。私が読めるのは「よいパッケージマネージャーはよくて速くてよい」程度なので、比較や思想のページがあるとよい
HN の皮肉っぽさには時々驚かされる
Rye が好きだ。Cargo や Hex のような他言語のパッケージマネージャーを使った後、Python にも似たシステムがないことをずっと残念に思っていたが、Rye はその渇きを完全に満たしてくれた。
venv、Python バージョン、プロジェクト依存関係を管理するために複数のツールを入れたくない立場としては、Rye 1 つですべて処理できるのが本当にいいRye はまだ感覚がつかめていないが、conda でも
venv、Python バージョン、プロジェクト依存関係の管理はうまくこなせる新しい Python 依存関係マネージャーに出会うのは、新しい JavaScript フレームワークを偶然見つけるようなものだ
venvを使えばよいポートを扱う必要があったり、プログラムを配布する必要があったり、ライブラリが C や OS の要素に依存しているなら、お金を受け取った後にコードベースを管理する必要も責任を負う必要もないコンサル仕事を始めるほうがましだ
最近は Docker で CUDA と PyTorch も動かせる。こういうスレッドで誰かが「単に Docker を使えばいい」と言うと、よくある返答は「Docker を学びたくない」だが、Docker の経験がまったくなくても Python コンテナを立ち上げるのに 10 分で済む
pixi(https://pixi.sh/latest/) がよい。Python バージョンを固定し、conda と PyPI からパッケージをインストールでき、Rust で書かれている
curlで取得して bash にパイプしろと言い、その次に任意のコマンド出力に対してevalしろというやり方は気が重い背景は少し複雑だ。Anaconda 社には Python で書かれた conda があり、オープンソースエコシステムである conda-forge は CI ビルドボットを備えた conda チャンネルだ。その後、同じ conda-forge の傘下で C++ 製の mamba が conda の代替として登場し、これは
alias conda=mambaが動作すべきレベルの実質的なドロップイン代替だ。現在は conda も高速化のために libmamba をソルバーとして使っているその後 mamba の作者がこれを pixi として分離し、Rust で書き直しつつ、環境の場所と有効化の方法に関する思想を変えたが、conda 環境とは完全に互換性がある
conda は、conda チャンネルにない場合のようなケースでは、
pip経由での PyPI パッケージのインストールを常にサポートしてきており、pixi は uv 経由で PyPI パッケージをサポートしています。だから pixi は速いのです。ブログ記事によると、mamba よりもはるかに速くする別の最適化もあります純粋な Python ではないパッケージを使うなら、conda 系が適しています。パッケージマネージャーの選択(conda/mamba/pixi)は二次的です
PyPI の問題は、門番役が不足している点です。そこに、純粋な Python ではないパッケージを標準的にパッケージングする方法が不足している問題が重なり、環境が漏れたり、特にソースだけを配布しながら
setup.pyでコンパイラまで含めて環境をブートストラップするようなおかしなことをすると、再現不能になりますconda 側では、conda-forge チャンネルがかなり優れた品質管理を行っています。制約条件、ライセンス、PyPI 配布物にライセンスファイルが欠ける問題、環境分離などを確認します。もちろん、誤ったバージョン制約を持つ PyPI の変更を自動マージする公式 bot をメンテナーが使えるので、完璧ではありません
現時点でどのツールも解決できていない問題は、PyPI 中心であることです。conda にないパッケージを扱わなければならず、パッケージのリリースも事実上、まず PyPI に出すことが強制されます
PyPI にしかないパッケージを conda 経由でインストールする場合でも、その依存関係の一部は conda にあるかもしれません。私の知る限り、PyPI パッケージの依存関係を満たすために conda パッケージを使うパッケージマネージャーはありません。手動で conda パッケージを追加して依存関係を合わせることはできますが、正しいバージョン制約が適用されないリスクがあります
オープンソースの Python パッケージを書くときも、設定が conda チャンネルだけに依存しているとしても、たいていはまず PyPI にリリースしなければならない、またはそうすべきです。conda-forge チャンネルへのリリースは、事実上 PyPI に存在することを要求するからです。だから私のような人にとっても、Rye は依然として有用であり、検討する価値があります
このプロジェクトにはとても期待していますが、より成熟した段階になるまで待つつもりです。Astral チームが出してきた他のものはどれも気に入っているので、期待は大きいです
Python プロジェクトを始めるたびに、依存関係/仮想環境管理の最新状況を学び直さなければならない感じがします