13
4

Pythonの環境構築ツールRyeの紹介

Last updated at Posted at 2024-04-23

追記(2024-08-31)

  • ryeがuvに置き換わったようです
  • ちょっと触った限りではコマンドをrye -> uvで置き換えるだけで、表向きはRyeと同じ使用感でいけそうでした
  • 既存プロジェクトでrye -> uvと乗り換える場合は下記ファイルを削除してuv syncをすれば良さそう…?
    (あとpyproject.tomlの変更はどうすればいいんだろうか…?)

image.png

はじめに

  • 私が Python を始めるにあたってぶち当たった最初の壁が環境構築でした
  • 本やブログのチュートリアルの通りにうまくいけば良いのですが、エラーに遭遇して頭をかかえることが多々ありました
  • 思い返すといろんな方法でインストールしたもの同士が喧嘩して、Python の環境が管理しきれなくなってる状態でした。(Anaconda と pip が喧嘩したり、現在の Python の PATH がどこを指しているか分からない状態だったり…)
  • ま いいか!と適当な管理で Python を使っていたのですが、いざチームでの運用や複数のプロジェクトを管理するにあたって、真面目に環境構築を考える必要がでてきました
  • こんな私でもいざ使ってみるとこりゃ便利だなあと手のひらを返したわけでして、本記事で環境構築の目的やそのためのツールである Rye を紹介したいと思います

参考

環境構築について

環境構築で達成したいこと

  • そもそも Python の環境構築で何を達成したいのかというと、下記の 3 点が挙げられます
      1. Python のバージョン管理
      1. プロジェクトごとに Python の仮想環境を作成
      1. プロジェクト内のパッケージを管理

    1. Python のバージョン管理
    • プロジェクト毎に使用している Python のバージョンが異なります
    • そのため Python のバージョンを複数管理して、任意のバージョンのものを使えるようにしたいです
    1. プロジェクトごとに Python の仮想環境を作成
    • 例えばPython 3.12.xが一つしかないと、プロジェクトによって必要でないパッケージが入ったり、パッケージのバージョンが合わない場合がでてきます
    • そのためPython 3.12.xを複製しプロジェクトXプロジェクトYなど、プロジェクト毎に Python の仮想環境を作成する必要があります
    1. プロジェクト内のパッケージを管理
    • プロジェクトで利用するパッケージやそのバージョンの管理を行う必要があります
  • 図にすると下記のような仕組みを実現させたいということになります。
image

環境構築用ツールのトレンド

75C05FE7-ECF6-4F74-8811-0807DC93954A

  • 定期的に新しいツールが出てきてキャッチアップが大変ではあるのですが、段々とツールがまとまって話が簡単になってきており、使う側としても好ましい変化だと思っています
  • そして今回は現在流行っているRyeを紹介したいと思います

Rye について

概要

  • Rye は Python のバージョン管理とプロジェクトのパッケージ管理をまとめて行えるツールです
  • 前述の図の通りpyenvpoetryの機能を併せたものになっており、より環境構築が簡単にできるようになりました
  • 1 つ懸念があるとするとまた実験的ということで、採用する際はこの点を一考する必要があります
    • (ただ私が調べた限り現在この文言が見当たらず、もしかしたら実験的というのは取れているかもしれません)

https://dev.classmethod.jp/articles/get-start-rye-python/
Rye は Rust の rustup と cargo にインスパイアされた、Python の新しいパッケージング体験を構築する実験的な試みとなっており、作者により「Production Ready ではない」と紹介されていますが、検証用等個人で使用するには使い勝手はかなり良かったのでご紹介致します。

Rye のインストールの手順(macOS)

  • macOS 14.1.2 (23B92)において、Rye の開発環境を構築していきます
  • まずは README の通り Rye のインストールを行います
  • Homebrew でもインストールできると思うのですが、技術記事が少なかったり後述のpip/uvを選ぶ選択肢がでなかったりで、不安があったため今回は利用していません
curl -sSf https://rye-up.com/get | bash
? Select the preferred package installer ›
❯ pip-tools (slow but stable)
  uv (quick but experimental)
  • インストール完了後にターミナルの結果に zsh が云々とかかれています
  • zsh を使う場合はターミナルの案内通り~/.zprofileに下記を記載します
source "$HOME/.rye/env"

Rye によるプロジェクトの作成

  • 下記のコマンドを実行するとプロジェクトのディレクトリが作成されます
rye init rye-demo-project

  • 次に利用する Python のバージョンを指定します
# Python 3.12.xを指定
rye pin 3.12
  • 利用できる Python の一覧は以下で表示されます
  • アーキテクチャ・cpython/pypy を選択できます
  • 上記のように指定せずバージョンだけを記載する場合は、アーキテクチャは現在のマシンのもので、cpython が選ばれるということです
# 利用可能なバージョン一覧を表示する
rye toolchain list --include-downloadable

...
# python / Inter Mac向け
cpython-x86_64@3.12.2 (downloadable)
cpython-x86_64@3.12.1 (downloadable)
cpython-x86_64@3.12.0 (downloadable)
...
# python / MチップMac向け(今回はこれ)
cpython@3.12.1 (downloadable)
...
# pypy / Inter Mac向け
pypy-x86_64@3.10.13 (downloadable)
...
# pypy
pypy@3.10.13 (downloadable)
  • このあと下記を実行するとプロジェクトの初期設定と、選択したバージョンの Python のダウンロードが行われます
rye sync
  • また他の PC で環境構築する場合など、パッケージのバージョンを更新せずにインストールだけしたい場合は--no-lockのオプションが使えます

https://rye-up.com/guide/sync/
--no-lock
To prevent the lock step from automatically running, pass --no-lock.

rye sync --no-lock
  • 必要なパッケージの追加/削除は以下の通り行います
# Seleniumをインストールする例
rye add selenium
# Seleniumをアンインストールする例
rye remove selenium

パッケージの設定

  • pyproject.tomlのパッケージ設定は、poetry のときと比べると以下のようになります
  • src 以下に他のパッケージがある場合は適宜追加して、パッケージ内で上位下位ディレクトリを意識せずモジュール間でアクセスできるようにしておきます
# poetry
-[tool.poetry]
-packages = [{include = “src/rye-demo-project”}]

# rye
+[tool.hatch.build.targets.wheel]
+packages = ["src/rye-demo-project"]

まとめ

  • Rye を使って Python プロジェクトの管理を一括して行えるようになりました!
  • 他にも色々ツールはありますが、現状 Rye が最も簡単に環境構築ができると思うので、興味がある方は導入してみると幸せになれるかもしれません
  • 今後も新しいツールが出てくるかもしれませんが、しばらくは rye で戦っていけると思います。(願わくば rye がデファクトスタンダードになりますように…🙏)
13
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4