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


関連記事

laravel logo

Laravelのコントローラの基礎

1 はじめに2 ルーティング2.1 使用可能なメソッド2.2 リダイレクト2.3 Viewの返却2.4 ルートパラメータ2.5 ミドルウェア2.6 プレフィックス3 バリデーション3.1 コントローラ ...

Rust入門してみた (構造体 / トレイト)

1 はじめに2 構造体2.1 メソッド2.1.1 関連メソッド2.2 トレイト2.2.1 構造体のフィールドの1つとして、トレイトのインスタンスを持つ場合2.3 derive属性3 おすすめ書籍 はじ ...

Go言語

GoでStructのAccessorを自動生成する

1 はじめに2 Accessorを自動生成する2.1 基本的な使い方2.2 receiver変数を変更する場合2.3 生成するファイル名を変える場合2.4 排他制御を行い場合3 どのように生成している ...

RubyのHanamiチュートリアルをやってみた

1 はじめに2 紹介2.1 Hanamiとは?2.2 Hanamiを選ぶ理由2.2.1 軽量2.2.2 アーキテクチャとして2.2.3 スレッドセーフ3 チュートリアルのための準備4 実践4.1 はじ ...

Go言語

sqlcを使ってSQLファイルからGoのコードを生成する

1 はじめに2 sqlcとは2.1 コード解析2.2 サポートする言語とデータベース3 sqlcでコードを生成する3.1 準備3.2 DDLを書く3.3 クエリを書く3.4 コードを生成する3.5 生 ...

フォロー

blog-page_side_responsive

2024年6月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

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