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


関連記事

Go言語

GoのWeb Application Framework

1 はじめに2 代表的なGoのWAF2.1 軽量なWAF2.2 フルスタックなWAF3 Ginを使ってみる3.1 クエリパラメータ+ポストパラメータ3.2 ファイルアップロード3.3 URLのグループ ...

rails

Rails 6の変更点と新機能

1 はじめに2 概要3 Rubyのサポートバージョン4 Webpacker4.1 Webpackerの設定4.2 Webpackerでのビルド4.3 ビルドしたJavaScriptファイルを読み込む4 ...

aws

AWS BatchはSaaSの非同期処理に向いているか?

1 はじめに2 AWS Batchの要素2.1 コンピューティング環境2.2 ジョブキュー2.3 ジョブ定義2.4 ジョブ3 AWS Batchの構築3.1 事前準備3.2 コンピューティング環境の作 ...

Go言語

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

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

laravel logo

PHPで画像編集~Intervention Image~

1 はじめに2 やる事3 インストール4 画像読み込み5 文字列の追加6 編集した画像の保存7 実際のコード8 他に使う機会がありそうな編集8.1 モザイク8.2 ぼやけ8.3 リサイズ9 さいご10 ...

フォロー

blog-page_side_responsive

2024年6月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

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