👀

Pythonライブラリ管理ツール決定版!Ryeを導入してみた

2024/04/23に公開

はじめに

普段はJavaScriptを主に開発を進めているのでPythonで開発を進めると様々な問題に悩まされます。
その中でもパッケージの管理については個人的に不自由をすごく感じています。Pythonのバージョンを設定するpyenv, プロジェクトごとのパッケージを管理するために仮想環境の構築、さらにパッケージのバージョンを設定するためのrequirements.txtと開発までのハードルが高すぎます。

良い方法がないかと調べていく中で全てを解決できそうなRyeというツールを見つけましたので導入方法をメモ程度に記事にしました。
導入環境はAWSのSageMaker上です。

ライブラリ管理簡単にできるようになったのでLinterとCode Formatterも追加してみました。

Ryeとは

RyeはPythonのWebアプリケーションフレームワークFlaskの開発者が作ったPythonパッケージ管理ツールです。
Rustで作られているため動作が早いとの評判です。

公式ドキュメントの中ではone-stop-shop toolと紹介されており、Ryeが全てやってくれるので開発者はRyeだけ知っておけばいい的な意味合いみたいです。その証拠にRyeをインストールすると自動でPythonまでもインストールされるので、基本的にRyeをインストールすることだけでPythonの開発環境が整うと言っても過言ではないようです。

開発者の方によってメンテナンスはされているようですが、Ryeはvery experimental toolとも紹介されていますのでチームで使用する際は少し注意が必要かもしれません。

Ryeのインストール方法

公式ドキュメントを参考に早速Ryeをインストールしていこうと思います。今回はLinuxベースのOSに対するインストール方法の紹介です。

curl -sSf https://rye-up.com/get | bash

またHomebrewからでもインストールが可能です。

brew install rye

インストールが終わったらpathを通します。

echo 'source "$HOME/.rye/env"' >> ~/.profile
もしくは
echo 'source "$HOME/.rye/env"' >> ~/.bashrc

bashの更新

exec bash

最後にコマンドRyeコマンドが正常に叩けることを確認してインストール完了です。

rye --version

Ryeの使い方

インストールが終わったら実際に使っていきたいと思います。
ライブラリを導入するまでの流れとしては

  1. Ryeの初期化
  2. Ryeの初回同期
  3. ライブラリの追加
  4. ライブラリの同期
    となります。

Ryeの初期化
Ryeを使用するためにはpyproject.tomlというファイルをPythonプロジェクト内に作成する必要があります。
initコマンドを使用して簡単に作成できます。

rye init your-project

コマンドを実行したディレクトリ内にyour-projectというディレクトリが新たに作られ、Ryeを使用するためのファイルが以下の構成で作成されます。

├── .git
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src
    └── my_project
        └── __init__.py

npm initと同じ役割ですね。

私の場合は既存のプロジェクトに対して導入したかったため以下のようなコマンドで作成しました。

rye init .

Ryeの初期化を行うと.python-versionが作成されPythonのバージョンが自動で設定されます。
特定のPythonバージョンを使用するには以下のように変更をしてください

rye pin 3.10

Ryeの初回同期
初期化が終わったら必要ライブラリのダウンロードや環境構築を行います。npm installと同じような役割です。

rye sync

完了すると、仮想環境用として.venvとlockfileが二つ作られます。
ここまで終わるとRyeで構築した環境上でptyhonコマンドを実行することができます。
ちなみに、システムに別バージョンのPythonがインストールされている場合、Pythonのバージョンは.python-versionの値が優先されます。
init後の実際の状態です。

ライブラリの追加
基本的な準備が整ったので実際にライブラリを追加していきたいと思います。
今回はLinterとしてflake8、Code Formatterとしてblack、ライブラリの動作に必要なpipを追加していきます。
また、blackとflask8に関しては開発時にのみ使用するため--devオプションをつけておきます。

rye add --dev black
rye add --dev flake8
rye add pip

追加したライブラリの一覧は以下のコマンドを実行してください

rye list

ライブラリの設定等はpyproject.tomlに追加されます。

ライブラリの同期
ライブラリを追加するだけでは実際には使えません。そのためライブラリを追加するごとに必ず同期を行う必要があります。こちらは先ほどと同じコマンドです。

rye sync

これで準備完了です。
実際にblackを使用してみます

rye run black .

vscodeであれば以下のようにsettings.jsonを編集することでファイルを保存するたびに自動で整形が行えるはずです。

"python.formatting.provider": "black",
"editor.formatOnSave": true,

ちなみにライブラリを削除する場合にはremoveコマンドを使用してください

rye remove black

今回はSageMaker上で構築をしていたので、Notebookの実行でもRyeの仮想環境を使用できることを確認してみましょう。
SageMaker Code Editor右上のSelect Kernelを選択すると以下のように実行環境を選択することができます。

まとめ

Ryeを導入したことで、npmを使用したライブラリ管理に近い方法で開発を進めることができ、開発がスムーズにいくようになり嬉しい限りです。これでSageMakerを使ったデータ分析自体に集中できそうです!!
少しでも皆さんの力になれたなら幸いです!

NCDCエンジニアブログ

Discussion