Open2

Ryeの情報収集

watanywatany

GPT先生にReadmeを和訳してもらう。


Ryeは、ArminのPythonニーズに対応するワンストップショップです。Pythonのインストールを管理し、pyproject.tomlファイルを管理し、依存関係のインストールとアンインストールを行い、裏で仮想環境を管理します。また、モノレポやグローバルツールのインストールにも対応しています。

これは、Pythonがどのようにあるべきかの願いであり、誰にでも機能する保証はありません。探求の途中であり、完璧ではありません。したがって、このようなものが存在すべきかどうかという疑問があります。

インストラクション動画
サムネイルをクリックして、9分間の紹介動画をご覧ください。

インストール

RyeはRustで構築されています。まだバイナリ配布はなく、現在はLinuxとmacOSでのみ動作します。

$ cargo install --git https://github.com/mitsuhiko/rye rye

ryeをインストールした後、すべてを自動的に管理するために必要なのは、rye sync(およびオプションで特定のPythonバージョンを選択するためのrye pin)だけです。

$ rye pin cpython@3.11
$ rye sync

ryeが管理する仮想環境は、pyproject.tomlの隣にある.venvに配置されます。通常どおりに有効化して作業することができますが、1つの注目すべき例外があります。それは、その中のPythonインストールにはpipが含まれていないということです。

デフォルトでは、pythonは普通のPythonになります。仮想環境を手動で有効化することなく、適切なPythonを自動的に選択するには、通常よりも優先度の高いPATHに~/.rye/shimsを追加します。rye管理プロジェクトの外で作業する場合、通常のPythonが自動的に選択されます。グローバルツールのインストールには、shimsをパスに追加する必要があります。

いくつかの機能

Pythonのインストールと管理を自動化します。

$ rye pin 3.11
$ rye run python
Python 3.11.1 (main, Jan 16 2023, 16:02:03) [Clang 15.0.7 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.

注意しておくべきことは、Ryeは適切なPythonバイナリを自動的にダウンロードしてインストールしてくれるということです。これらのPythonバイナリは、現在、indygregのpython-build-standaloneリリースから取得されています。

グローバルに分離された環境でツールをインストールします:

$ rye install maturin

ローカルのpyproject.tomlの依存関係を管理し、仮想環境を自動的に更新します:

$ rye add flask
$ rye sync

決定事項

物事がどのようになっているかを理解するために:

  • 仮想環境:個人的には仮想環境があまり好きではありませんが、それらは広く普及しており、適切なツールサポートがあるため、__pypackages__よりも優先しました。

  • デフォルトの依存関係はありません:仮想環境は依存関係がない状態で立ち上がります。pipやsetuptoolsすらインストールされていません。Ryeは仮想環境の外から仮想環境を管理します。

  • 非標準のコア部分はありません:Ryeは(pyproject.tomlの自身のツールセクションを除いて)標準化されたキーを使用します。つまり、通常どおりの要件を使用することになります。また、カスタムのロックファイル形式を使用せず、裏でpip-toolsを使用しています。

  • Pipはありません:Ryeはpipを使用しますが、それを公開しません。pyproject.toml内の依存関係のみを管理します。

  • システムPythonはありません:これ以上、Linuxディストリビューションの奇妙なPythonインストールやmacOS上の混乱に対処できません。以前はどこでも同じPythonをビルドしていましたが、今ではindygregのPythonビルドを使用しています。RyeはそこからPythonビルドを自動的にダウンロードして管理します。コンパイルも発散もありません。

  • プロジェクトローカルのシムズ:Ryeは、現在のpyproject.tomlを自動検出し、それ以下で自動的に動作するPythonシムを維持しています。シェルにシムズを追加してpythonを実行すると、自動的に適切なプロジェクトで動作します。

これからどうなるか?

  • Pythonパッケージングの世界では、標準化の不足によりいくつかの欠点があります。このプロジェクトは年月を経て次の問題に直面しました:

  • Pythonバイナリ配布がない:python.orgからのCPythonビルドは完全に不十分です。一部のプラットフォームでは、.msiインストーラーしか手に入らないこともあれば、ターボールしか手に入らないこともあります。年月を経て人気を博したさまざまなPythonディストリビューションは、大きく異なり、下流であらゆる種類の問題を引き起こしています。このプロジェクトは、indygregのスタンドアロンビルドを使用しています。今日の混乱に代わる、整備され信頼性のあるPythonビルドを配布するように誰かが始めることを願っています。

  • 開発依存関係がない:Ryeは現在、pyproject.tomlのカスタムセクションで開発依存関係を表現する必要があります。これについてのエコシステムの標準がありません。それを追加するべきです。

  • ローカル依存関係オーバーレイがない:ローカル依存関係を表現する方法がありません。Rustはこの目的のために { path = "../foo" } のようなものを持っており、リモートとローカルの参照が共存でき、公開時にそれらを書き換えます。

  • 公開されていないPip:pipは意図的に公開されていません。仮想環境に何かをインストールすると、次回の同期時に消えてしまいます。仮想環境にインストールせずにpipにアクセスできるように、ryeを~/.rye/shims/pipにシンボリックリンクすることができます。ドラゴンがいます。

  • ワークスペース仕様がない:モノレポやそのようなもののために、Pythonエコシステムはワークスペースの定義が必要です。今日はそれが存在しないため、各ツールがこの問題に対する独自の解決策を見つける必要があります。

  • 基本的なスクリプトセクションがない:pyproject.tomlには、ryeがrye.tools.scriptsで表現するようなスクリプトを表現する標準があるべきです。

依存関係の追加

新しい依存関係を追加するには、インストールしたいパッケージ名を指定してrye addを実行します。開発用のパッケージのみを追加するために、pyproject.tomlに独自の拡張機能が存在します。その場合は、--devを追加してください。

$ rye add "flask>=2.0"
$ rye add --dev black

依存関係を追加しても、すぐにはインストールされません。インストールするには、もう一度rye syncを実行してください。

ワークスペース

複数のプロジェクトが同じ仮想環境を共有するようにするには、pyproject.tomlにワークスペースを宣言できます。

[tool.rye.workspace]
members = ["foo-*"]

ワークスペースでrye syncが実行されると、すべてのパッケージが常にインストールされます。これは、デフォルトで編集可能にインストールされるため、相互依存が可能です。

ロックファイル

Ryeは(まだ!)世界を再発明しようとはしていません。つまり、自動的にpip-toolsを裏で使っています。pipもpip-toolsも現在ロックファイルを提供していないため、Ryeは生成されたrequirements.txtファイルを代わりに使っています。rye syncを実行するたびに、requirements.lockおよびrequirements-dev.lockファイルが自動的に更新されます。

スクリプト

rye runは、仮想環境からバイナリを呼び出すか、設定されたスクリプトを実行するために使用できます。Ryeは、tool.rye.scriptsセクションのpyproject.tomlで基本的なスクリプトを定義できるようにしています。

[tool.rye.scripts]
serve = "python -m http.server 8000"

これらは、rye run <script_name>でのみ利用できます。各スクリプトは文字列または配列で、配列の各アイテムがスクリプトの引数です。スクリプトは仮想環境がアクティブな状態で実行されます。

利用可能なものを確認するには、rye runを引数なしで実行し、すべてのスクリプトがリストされます。

Pythonディストリビューション

RyeはシステムPythonインストールを使用しません。代わりに、Gregory SzorcのスタンドアロンPythonビルドを使用します:python-build-standalone。これは、Pythonインストールの統一された経験を作成し、さまざまなPythonディストリビューションによって作成される非互換性を回避するためです。最も重要なことは、もうPythonをコンパイルする必要がなくなることで、準備されたバイナリがダウンロードされるだけです。

Pythonツールチェーンの管理

rye toolchain registerを使用して、カスタムPythonツールチェーンを登録できます。

$ rye toolchain register ~/Downloads/pypy3.9-v7.3.11-macos_arm64/bin/python
Registered /Users/mitsuhiko/Downloads/pypy3.9-v7.3.11-macos_arm64/bin/python as pypy@3.9.16

その後、このケースではrye pin pypy@3.9.16を使用してピン留めできます。名前の自動検出がうまくいかない場合は、--nameを使用して明示的な名前を指定できます。ダウンロード済みまたはリンク済みのツールチェーンを削除するには、rye toolchain removeコマンドを使用します。利用可能なものをリストするには、rye toolchain listを使用します。

グローバルツール

ツールを分離された仮想環境にインストールする場合(pipsiおよびpipxのように)、ryeも使用できます(~/.rye/shimsをパスに追加する必要があります)。

$ rye install pycowsay
$ pycowsay Wow

  ---
< Wow >
  ---
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

アンインストールするには、再度rye uninstall pycowsayを実行してください。

仮想環境の使用

仮想環境を使用する方法は2つあります。1つ目は、通常どおりそれをアクティブにすることです。

$ . .venv/bin/activate

もう1つは、rye run <script>を使用して、仮想環境のコンテキストでスクリプト(.venv/binにインストールされているもの)を実行することです。これは、例えばblackを実行するために使用できます。

Copy code
$ rye add --dev black
$ rye sync
$ rye run black .

ライセンス:MIT