takuroooのブログ

勉強したこととか

Pythonのパッケージ管理ツールRyeに関するメモ

Ryeを触ってみたので忘れないようにメモしておく。

github.com

色々触ったときのリポジトリ

GitHub - takurooo/rye-sample

目次

インストール方法

ここに書いてある。 rye-up.com

Linuxなら

# インストール
$ curl -sSf https://rye-up.com/get | bash

# 環境パス追加
$ echo 'source "$HOME/.rye/env"' >> ~/.bashrc

# アップデート
rye self update

# アンインストール
rye self uninstall

envシェルスクリプトになっていて、PATHに$HOME/.rye/shimsがなければexport PATH="$HOME/.rye/shims:$PATHを実行してくれる。

$ cat ~/.rye/env 

# rye shell setup
case ":${PATH}:" in
  *:"$HOME/.rye/shims":*)
    ;;
  *)
    export PATH="$HOME/.rye/shims:$PATH"
    ;;
esac

なので、$HOME/.rye/shims:$PATHに実行ファイルがあるそう。

$ ls ~/.rye/shims/
python  python3  rye

これでryeコマンドが使える。 pythonpython3がshims下にある理由は後述

プロジェクトの作成

# rye_sampleというプロジェクトを作る
$ rye init rye_sample

$ tree rye_sample/
rye_sample/
├── README.md
├── pyproject.toml
└── src
    └── rye_sample
        └── __init__.py

この他に隠しファイルとして.git.gitignore.python-versionも生成されている。 重要なのはpyproject.toml.python-versionpyproject.tomlPythonのパッケージ情報やRyeのコンフィグレーションが書かれている。 .python-versionは使用するpythonのバージョンが書いてある。

$ cat .python-version 
cpython-x86_64-linux@3.12.0

この時点では3.12のpythonはインストールされていない。

仮想環境の構築と依存パッケージのインストール

# flaskを依存パッケージに追加
$ rye add flask
# blackをdevの依存パッケージに追加
$ rye add --dev black

# 仮想環境の構築
$ rye sync
# devの依存パッケージを含みたくない場合
$ rye sync --no-dev

# パッケージを削除した場合
$ rye remove flask
$ rye sync

rye add <package-name>で依存パッケージの追加をできるが、このコマンドはpyproject.tomlに依存パッケージの記述を追加するだけ。
rye syncで下記処理が実行される。

  • .python-versionに書かれているPythonのインストール
  • 仮想環境の``.venv"フォルダを生成 or 更新
  • ロックファイルの生成 or 更新(requirements.lock / requirements-dev.lock)

仮想環境の有効化

# 仮想環境有効化
$ . .venv/bin/activate

# 仮想環境無効化
$ deactivate

仮想環境を有効化しなくても、プロジェクト内でpythonと実行すると仮想環境内のPythonを参照してくれる。

shims下のpythonコマンドについて(~/.rye/shims/にあるpythonとpython3)

Ryeをインストール後、~/.rye/shims/がPATHに追加される。
ここにpythonpython3がいる。
よってpython or python3と実行するとシステムにインストールされているpythonではなく、shims下のpythonが実行される。
shims下のpythonコマンドがどう振る舞うかは下記ドキュメントに書かれている。

rye-up.com

Inside a Rye managed project they resolve to the Python interpreter of the virtualenv. This means that even if you do not enable the virtualenv, you can just run python in a shell, and it will automatically operate in the right environment.

Ryeのプロジェクト内の場合は、仮想環境を有効化しなくても仮想環境のPythonを起動してくれる。

Outside a Rye managed project it typically resolves to your system Python, though you can also opt to have it resolve to a Rye managed Python installation for you. This is done so that it's not disruptive to your existing workflows which might depend on the System python installation.

Ryeのプロジェクト外の場合は、システムにインストールされているPythonを起動してくれる。 ただし、下記コマンドを実行するとRyeがインストールしたPythonに切り替えることもできるとのこと。

$ rye config --set-bool behavior.global-python=true

# 上記コマンドでconfig.tomlが編集される
# rye config --show-path でコンフィグの場所が分かる
$ cat ~/.rye/config.toml 
[behavior]
global-python = true

違うバージョンのPythonを使いたい場合はインストールが必要

# Pythonをインストール
$ rye fetch 3.9
# こっちのコマンドでもインストール可能
$ rye toolchain fetch 3.9

# インストール済みPythonを確認
$ rye toolchain list
cpython@3.12.0 (/home/hoge/.rye/py/cpython@3.12.0/install/bin/python3)
cpython@3.9.18 (/home/hoge/.rye/py/cpython@3.9.18/install/bin/python3)

# インストール済みの特定のバージョンのPythonを使う
# このコマンドはRyeのプロジェクト外でしか使えない
$ python +3.9 sample.py

# インストール済みPythonを削除
$ rye toolchain remove 3.9.18

グローバルなツール

blackはプロジェクトごとではなく、どこでも共通で使えるようにしたい場合、global toolとしてインストールできる。

# global toolとしてblackをインストール
$ rye install black

# global toolとしてインストールされてもののリストを表示
$ rye tools list
black

# 削除
$ rye uninstall black

その他

pyproject.tomlの中身の意味はここを見る

Python Project - Rye

ビルドとパブリッシュについてはここを見る

Building and Publishing - Rye

グローバルなコンフィグファイル(config.tomlとか)についてはここを見る

rye-up.com

参考リンク

リポジトリ
github.com

ドキュメント
rye-up.com

デモ動画
www.youtube.com