🦛

久しぶりのPython環境をRyeで整える

2023/05/27に公開
3

はじめに

よくAWSの仕事をするので、開発環境をAWS Cloud9(以下Cloud9)で用意することがある。

IAM Roleが使えるのでAWS内の開発は便利なのだが、そのままPythonで開発しようとすると、2023/05/27時点でこう表示されるので、ちゃんと開発環境作らなくちゃね。という気持ちになる。

python --version
Python 3.7.16

久々にLangChainやLlamaIndexやらで盛り上がってるし、Python環境でも作るか! と思い立った筆者。じゃあ何を準備すればいいんだっけ、と軽く調べただけでもpip, venv, pyenv, pipenv, poetryなどの選択肢がありすぎて、もうこの時点でげんなりする。Pythonのパッケージマネージャの周辺事情はずっと混沌としていたんだった……

ただ最近は比較的よさげなプロジェクトのRyeがあるので、今回はこれで環境を整えてみる。

Ryeとは

上で書いたような「複雑なPythonのエコシステムを統一したい」という気持ちで生まれた、PythonパッケージマネージャーがRye。Flaskなどで有名な@mitsuhiko氏が作者である。
https://github.com/mitsuhiko/rye

Rust製なので、それ自体がPythonへの依存関係がないのがメリットらしい。確かにうれしい。

リポジトリのReadmeを雑にChatGPTに翻訳させたメモもあるので、時間のない方はさっと読んでみてほしい。
https://zenn.dev/watany/scraps/806cd7e26af0e5

ドキュメントはこちら。
https://rye-up.com/

Ryeを導入する

ほぼ公式の転記だが、Cloud9で使っているAmazon Linux2にも普通に導入できる。
https://rye-up.com/guide/installation/#installing-rye

curl -sSf https://rye-up.com/get | bash
echo 'source "$HOME/.rye/env"' >> ~/.bashrc
source "$HOME/.rye/env"

Ryeでプロジェクトを作る

https://rye-up.com/guide/basics/

を読んで、よくありそうなLLM活用プロジェクトを立ち上げるまでの流れ。
※わたしは単にLangChainのチュートリアルを進めたいだけ

# プロジェクト`sample_llm`の作成
rye init sample_llm && cd sample_llm
# Projectの構造はこんな感じ
tree
.
├── pyproject.toml
├── README.md
└── src
    └── sample_llm
        └── __init__.py

2 directories, 3 files
# Pythonのバージョン選択(ファイル`.python-version`で管理される)
rye pin 3.11
# 開発用のツールをpyproject.tomlに追加
rye add --dev ruff black mypy
# 必要なライブラリをpyproject.tomlに追加
rye add langchain openai
# Install
rye sync

直感的に進められそうなことがわかる。

また、このTweetの意味もわかってくる。

https://twitter.com/voluntas/status/1661957955472986114

Appendix. Ryeの仮想環境

you can use rye sync to get the first synchronization. After that, Rye will have created a virtualenv in .venv and written lockfiles into requirements.lock and requirements-dev.lock.
https://rye-up.com/guide/basics/

にもある通り、rye syncの初回実行時に.venvが作成され、以降もRyeが透過的に仮想環境を管理する。すごい。

ちなみにCLIで実行するblackやpytestなどは、rye run blackと都度入力するのも面倒である。
プロジェクト毎にVersion固定する必要が無い限り、run addではなく、run installで導入することでグローバルにインストールできる。

# プロジェクト内で導入する
rye add black
ray sync
rye run black

# グローバルに導入する
rye install black
black

まとめ

ということで、Ryeの基本的な使い方をなぞってみた。Rust製というのもあってサクサク動くのもうれしい。

Pythonでの開発をまた始めそうだけど、環境を準備するところで面倒がっている方に一緒にRyeを始めてみませんか?という記事でした。

Discussion