久しぶりのPython環境をRyeで整える
はじめに
よく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氏が作者である。
Rust製なので、それ自体がPythonへの依存関係がないのがメリットらしい。確かにうれしい。
リポジトリのReadmeを雑にChatGPTに翻訳させたメモもあるので、時間のない方はさっと読んでみてほしい。
ドキュメントはこちら。
Ryeを導入する
ほぼ公式の転記だが、Cloud9で使っているAmazon Linux2にも普通に導入できる。
curl -sSf https://rye-up.com/get | bash
echo 'source "$HOME/.rye/env"' >> ~/.bashrc
source "$HOME/.rye/env"
Ryeでプロジェクトを作る
を読んで、よくありそうな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の意味もわかってくる。
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
仮想環境周りの記述に誤りがありそうなので後日加筆します。→暫定対処済。後日体裁等直します
これは違うはず。
と書いています。
@shrkw
ありがとうございます😭 後日こちらも修正します