nikkie-ftnextの日記

イベントレポートや読書メモを発信

素振りの記:Ryeに慣れるために、Pythonで自分だけのクソライブラリを作る

はじめに

エミリーちゃん、かわいいいいいいいいいいいいいいいいいいい!
nikkieです(←落ち着いて)

Pythonパッケージ管理界のルーキー Ryeを素振りしました。

目次

Ryeって、何よ?

mitsuhiko氏1Python環境構築の個人的な課題の解決のために作ったツール。
RustのCargoのような使い勝手から、なかなか歓迎されている印象です。

ただ今すぐ採用するかは、私としては懐疑的です。
Experimental(実験的)と謳っており、「It's not yet production ready」2(まだproduction readyではない)とのこと。
私は心配性なので開発が継続されるかを特に気にしていて(氏のいっときの気まぐれじゃないよね?)、目新しさに飛びついたら1年後には過去の遺物扱いもありえるかもと思っています。

ばんくしさん発表資料(みんなのPython勉強会)より

Ryeは以下を束ねたもの3

Ryeのインストール

macOSで環境構築しました。
めっちゃ簡単です(たしかにrustupっぽい6)。

  1. インストール
    • curl -sSf https://rye-up.com/get | bash
  2. シェルの設定(zsh
    • echo 'source "$HOME/.rye/env"' >> ~/.zshrc
    • 上記コマンドにより、シェル立ち上げ時に環境変数PATHryeコマンドが見つかるように設定されます7
% rye --version
rye 0.16.0
commit: 0.16.0 (c003223d5 2023-12-16)
platform: macos (aarch64)
self-python: cpython@3.11
symlink support: true

Pythonで自分だけのクソライブラリを作る方法」

からあげさんの記事にオマージュ捧げていきます。

からあげさんの記事はsetup.pyを置き、自作ライブラリをGitHubからインストールできるようにするというもの。
すでに一度オマージュしていて、pyproject.toml版を書きました。

Pythonコミュニティはpyproject.tomlに移行している状況で、新規にPythonライブラリを作るときはsetup.pyに代えてpyproject.tomlがおすすめです。

本題:Ryeで自分だけのクソライブラリを作る方法

Ryeだと一瞬です。

% rye init unko
% cd unko
% rye sync
% # クソライブラリの実装をします

いやー、便利な時代になったものです

rye init

rye initした時点で、プロジェクトの雛形が作られます。
pyproject.tomlが自動でできています!

.
├── .git
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src  # <- unkoライブラリの雛形はここにできている(src-layout)

pyproject.tomlの中身の一部

[project]
name = "unko"
version = "0.1.0"
description = "Add your description here"
authors = [
    { name = "ftnext", email = "(略)" }
]
dependencies = []
readme = "README.md"
requires-python = ">= 3.8"

[project.scripts]
hello = "unko:hello"

rye sync

プロジェクトの環境をRyeに管理させます。

  • (初回は)仮想環境構築(virtualenv)
  • lockファイルの作成(pip-tools)
  • lockファイルと仮想環境の状態の一致

pyproject.tomlに定義されているhelloコマンドが呼び出せるようになります。

% rye run hello
Hello from unko!

この流れは以下でも案内されます。

クソライブラリとしての実装追加

src/unkoにunko.pyを追加します。

def deru():
    print("puripuri")

すでにあるsrc/unko/__init__.pyも編集しましょう(スマートなimportができます)

+from unko.unko import deru

def hello():
    return "Hello from unko!"

先のrye syncにより、Ryeが管理する仮想環境にソースコードがeditableインストールされているようで、再インストール不要で動かせます。

% rye run python  # Ryeが管理する仮想環境で対話モード立ち上げ
>>> from unko import deru
>>> deru()
puripuri

GitHubリポジトリからインストール

GitHubにソースをプッシュしておくと、Ryeがない環境にもpipを使ってインストールできました

仮想環境を作ってインストールしていきます

(venv) % pip install git+https://github.com/ftnext/unko-by-rye
(venv) % python
>>> from unko import deru
>>> deru()
puripuri

unko-by-ryeに取り組んだメモ

  • rye init unko-by-rye の後に rye sync すると、unko-by-ryeがインストールできないエラー
  • unko-by-ryeからunkoにリネームしたが、rye syncが必要となった(逆に言えばリネームに伴うエラーはrye syncで解決できた)

終わりに

Ryeを使って簡単なクソライブラリを作ってみました。
Experimentalなツールではありますが、開発者がやることはライブラリを書くだけになっていますね。
pyproject.tomlが生成されて配布可能になってますし、環境の管理はRyeが担ってくれます。

これは開発が継続されたら嬉しい人多いんじゃないですかね。
OSSで開発チームが組成されたり、PyPAの下に入ったり、道はないのかな。

(ただし、nikkie個人としてはちょっと音楽性の違いがあって、和解できていません。詳しくは別の記事で書こうかな)


  1. Flaskなどの作者です。近年はRustにお熱
  2. https://rye-up.com/ より(太字の箇所)
  3. アーカイブもあります
  4. 標準ライブラリのvenvはvirtualenvの一部の機能が取り込まれたもの(なのでvirtualenvの方が高機能という認識です)
  5. buildはめっちゃ便利です。開発してくださってありがとう😭
  6. Rust体験記
  7. 参考