• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

python rye

date: 2023-06-03 excerpt: pythonのryeの使い方

tag: pythonrye


pythonのryeの使い方

概要

  • poetryと同じようなツール
    • pyenvの役割もrye単独で担っている
  • 哲学としてはconda, pipなど乱雑するパッケージマネージメント方式を考えないようにするようなツール
    • ryeとはライ麦畑のことらしい
    • ryeがあることでマネージメントのスタンダードが一個増えてしまう自己矛盾がある
  • rye addで追加したパッケージはproject.tomlに記述される
    • パッケージのバージョンをあとから変更する際はproject.tomlを編集しrye syncを実行
  • 2024年7月現在、uvを開発しているAstralに移管された

poetryとの差分

  • pythonの任意のバージョンのインストールがryeのほうが楽に行える
  • 仮想環境のバイナリがプロジェクト配下に置かれるのでまとまりが良い(ように見える)

インストール

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

プロジェクトの始め方

$ rye init <project-name> && cd <project-name> 

任意のpythonのバージョンに設定

$ rye pin <version> # e.g. rye pin 3.11

パッケージの追加

  • パッケージも追加してもsyncするまで実際にはインストールされない
$ rye add <package-name> # e.g. rye add openai

パッケージの仮想環境へのインストール

$ rye sync 

ryeの環境下でコマンドを実行

  • 固有で使用できるコマンドの一覧が引数なしで表示される
$ rye run <command>

venvのアクティベーション

$ . .venv/bin/activation

Dockerでryeのプロジェクトを実行する

コンテナにryeをインストールしない場合

FROM python:3.11

RUN apt-get update -y && apt-get install -y
RUN pip install --upgrade pip
RUN pip install uv

WORKDIR /app
COPY . /app/

COPY requirements.lock ./
RUN uv pip install --no-cache --system -r requirements.lock

CMD sh -c "<command>"

タスクランナーとしての利用

  • [tool.rye.scripts] にタスクを記述することで、rye run <task-name>で実行できる

例

[tool.rye.scripts]
test = { cmd = "pytest -s" }

実行

$ rye run test

トラブルシューティング

  • pyenvとryeを併用したときにpythonが起動しなくなる
    • 原因
      • pyenvのglobalのpythonが未設定の際に発生する
    • 対応
      • pyenvのglobalのpythonを設定する
        • pyenv global <version>
  • ryeとpyenvのpython環境名の非互換により、neovim, pyrightなどのpythonパスが正しく設定されない
    • 原因
      • ryeの命名規則は cpython-x86_64-linux@3.11.5 などであるので、pyenvの命名規則とは異なる
    • 対応
      • pyenv側で環境に対してシンボリックリンクを張って同様の環境名を用意することで、neovim, pyrightなどのpythonパスの不具合を回避できる 

修正例

$ ln -s $HOME/.pyenv/versions/3.11.5 $HOME/.pyenv/versions/cpython-x86_64-linux@3.11.5

参考

  • Rye: An Experimental Package Management Solution for Python
  • Rye + Docker #239


pythonrye Share Tweet