BackEnd

新時代のPythonプロジェクト・パッケージ管理ツール「Rye」使ってみた

投稿日:

はじめに

Pythonでアプリケーションやパッケージを開発する場合、これまでは仮想環境であるpyenvと、プロジェクト・パッケージ管理ツールのpoetryを組み合わせて開発することが多かったと思います。
それが、Ryeの登場によって、少し変化しそうです。今回は、Ryeを使って、プロジェクトの作成や依存パッケージのインストールなどを試してみたいと思います。

Ryeとは?

Ryeは、これらの仮想環境の管理と、プロジェクト・パッケージ管理の両方ができるツールです。Rustで書かれていて、Pythonに依存していません。
個人的に、Ryeを使った時の嬉しいポイントは「仮想環境の管理」と「プロジェクト管理」が統合されていることです。
pyenvとpoetryを組み合わせて使う場合には、poetryに対してpython環境を設定する必要があるのですが、特にPythonをアップデートする場合などにとても面倒です。
例えば、Python 3.12.2 -> 3.12.3にアップデートする場合、以下のようなコマンドを順番に実行する必要があり、とても手間です。

これが、ryeを使う場合には、以下のコマンドだけですみます。

これだけでもめちゃくちゃ良い感じですね!

その他に、ユニークな機能として、標準でRustによるPython拡張モジュールを作成できるオプションも用意されています。

ちなみに、RyeのオーナーであるAstral.shは、他にも「uv」というパッケージマネージャや、「Ruff」というリンター兼フォーマッタやという開発しています。
Ryeも、仮想環境の構築や、パッケージ管理には「uv」を使っています。
またデフォルトで rye lintrye fmt コマンドが使用可能で、実際にはRuffがlintやフォーマットをかけてくれます。
(Ruffは、現状flake8やblackの代替えにはなりますが、pylintの代替えに向けては実装中とのことです。)

Ryeを使ってみる

Ryeのセットアップ

まずは、Ryeを導入します。macOSの場合はbrewでインストールできます。

実際にプロジェクトを作ってみます。

初期状態では、以下のようなファイル構造となっています。

pyproject.toml.python-version といった、Pythonプロジェクトやpyenvでお馴染みのファイルが最初から入っています。実際、ryeでもこれらのファイルを使ってプロジェクトが構成されています。
ちなみに、セットアップした時点では、Python 3.12.3が指定されていました。

ここでsyncを実行することで、.venv内にPython仮想環境が構築されます。

実際のところは、仮想環境を構築するだけでなく、pyproject.tomlに記載された依存パッケージのインストールや、ロックファイルの生成も行われます。
ここまで構築できれば、 rye run で仮想環境内でのコマンドを実行することができます。( poetry run と同じ使い方ができます。)

仮想環境に入る

作られた仮想環境で、Pythonを実行してみます。まず、仮想環境に入るために以下のコマンドを実行します。

すると、以下のようにターミナルの左端にプロジェクト名が表示されるようになります。

この状態であれば、pythonを使うことができます。

依存パッケージの追加

fastapiを追加してみます。

開発用のパッケージは --dev オプションを使います。

ここまで実行すると、pyproject.tomlにパッケージが書き込まれますが、実際にインストールしてlockファイルに書き込むには rye sync する必要があります。

ちなみに、lockファイルは requirements.txt と同じフォーマットで出力されるため、プロダクションへのデプロイにDockerを使用する場合は、このロックファイルを使って pip install -r requirements.lock とするだけで依存パッケージをインストールできます。
また、開発用のパッケージは上記のロックファイルには含まれないため、開発用のパッケージがインストールされてしまうこともありません。( requirements-dev.lock という別のロックファイルが生成されます。)

この仕組みにより、Dockerビルドする際には、ロックファイルさえあれば、ryeを使うことなく依存パッケージをインストールすることができます。

VSCodeから使ってみる

VSCodeでこのプロジェクトを開いてみたところ、.venv内のpythonインタプリンタを自動的に認識し、依存パッケージも問題なく認識しました。
また、ターミナルも仮想環境に入った時と同じく、pythonや依存パッケージのコマンドへのパスが通っている状態でした。

FastAPIが使えるか確認するため、 src/sample_project/main.pyこちらのFastAPIのサンプルコードを貼り付けて、以下コマンドで実行してみます。

http://localhost:8000/ にアクセスすると、問題なくJSONレスポンスが返ってきました。もちろん、ホットリロードも問題なく動いていました。

さいごに

Ryeには、pyenvとpoetryを組み合わせていたときのような複雑さは無く、簡単に環境構築ができる上に、VSCodeでの開発も問題なくできそうでした。まだ実戦投入はしていませんが、どこかでRyeに切り替えていきたいなと思いました。

おすすめ書籍

エキスパートPythonプログラミング 改訂4版 (アスキードワンゴ) Effective Python 第2版 ―Pythonプログラムを改良する90項目 動かして学ぶ!Python FastAPI開発入門

blog-page_footer_336




blog-page_footer_336




-BackEnd
-, ,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

rails

Capistrano3でRailsアプリケーションをデプロイする

1 はじめに1.1 前提条件2 Cpistranoについて3 導入3.1 Gemのインストール3.2 設定ファイルの準備4 デプロイ設定4.1 Capfileを修正する4.2 各環境で共通のデプロイ設 ...

laravel logo

Laravelで認証APIを作る

1 はじめに1.1 条件1.2 JWTとは2 準備2.1 認証機能を有効化2.2 jwt-authのインストール2.3 コンフィグファイルの作成2.4 secretの作成3 Userモデルを修正4 g ...

Go言語

Go 1.16でのgo getとgo installの変更点

1 はじめに2 go getとgo installの役割2.1 go getの役割2.2 go installの役割3 この変更で何が改善されたのか3.1 go:generateと併用する4 その他の ...

Go言語

Goの抽象構文木でコードを解析する

1 はじめに1.1 抽象構文木とは2 ASTでコードを解析する2.1 サンプルコードを解析する2.2 構造体の木構造を確認する2.3 メソッドの木構造を確認する3 任意の対象を捜索する4 ASTをファ ...

Rust入門してみた その3 Enum / match / Option編

1 はじめに2 Enum2.1 Enumの定義2.2 パターンマッチ2.3 Enumへのメソッド実装3 よく使う標準Enum3.1 Option3.2 Result4 おすすめ書籍 はじめに 前回に引 ...

フォロー

blog-page_side_responsive

2024年6月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。