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 lint や rye 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開発入門

page_footer_responsive




-BackEnd
-, ,

執筆者:

免責事項

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


comment

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

CAPTCHA


関連記事

rails

半年ぶりにRails Tutorialをやったメモ

はじめに Railsを触り始めて半年ほどたちました、tonnyです。 復習もかねてRails Tutorialを実施したので、そのメモを残します。 やはり2回目でも気づくことは多いので、非常に勉強にな ...

rails

関連するモデルのレコードを一緒に作成する方法

はじめに フォームからレコードを作成する際に、関連するモデルのレコードを一緒に作成したい場合があると思います。 (例えばbookレコードとauthorレコードなど) 今回はRailsで一度に関連するモ ...

Vue.js+TypeScriptな環境整備

はじめに Vue.jsはProgressive Frameworkをうたい、小規模から大規模までのフロントエンド開発をサポートしています。 画面の一部に動きをつけるような軽微な使い方であれば、フレーム ...

rails

Ruby2.4でCookieを手動で復号する際に発生したエラーの対処

はじめに こんにちは、onoです。 現在開発中のアプリケーションでログインAPIのテストコードを実行したところ、 Ruby2.3.1ではうまくいっていたCookieの復号が、Ruby2.4.1ではエラ ...

Go言語

GoフレームワークGinでミドルウェアを使ってログインAPIを実装

はじめに 今後 Go を使用した案件をやる機会があり、現在 Go の勉強中なのですが、今回は案件でも使用するフレームワーク Gin を使用してログインAPIを実装したいと思います。Gin はメモリ利用 ...

フォロー

blog-page_side_responsive

2024年6月
日 月 火 水 木 金 土
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

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