はじめに
エミリーちゃん、かわいいいいいいいいいいいいいいいいいいい!
nikkieです(←落ち着いて)
Pythonパッケージ管理界のルーキー Ryeを素振りしました。
目次
- はじめに
- 目次
- Ryeって、何よ?
- Ryeのインストール
- 「Pythonで自分だけのクソライブラリを作る方法」
- 本題:Ryeで自分だけのクソライブラリを作る方法
- GitHubリポジトリからインストール
- 終わりに
Ryeって、何よ?
mitsuhiko氏1がPython環境構築の個人的な課題の解決のために作ったツール。
RustのCargoのような使い勝手から、なかなか歓迎されている印象です。
ただ今すぐ採用するかは、私としては懐疑的です。
Experimental(実験的)と謳っており、「It's not yet production ready」2(まだproduction readyではない)とのこと。
私は心配性なので開発が継続されるかを特に気にしていて(氏のいっときの気まぐれじゃないよね?)、目新しさに飛びついたら1年後には過去の遺物扱いもありえるかもと思っています。
ばんくしさん発表資料(みんなのPython勉強会)より
Ryeは以下を束ねたもの3
Ryeのインストール
macOSで環境構築しました。
めっちゃ簡単です(たしかにrustup
っぽい6)。
- インストール
curl -sSf https://rye-up.com/get | bash
- シェルの設定(zsh)
% 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がインストールできないエラーryeのBasicsにrye init my-projectってありますが、最新のv0.16.0だと続くrye syncでエラーになりますね。
— nikkie / にっきー (@ftnext) 2024年1月10日
原因は生成されたpyproject.tomlの
[project.scripts]
hello = "my-project:hello"
ハイフンNGなのでmy_projectになってほしい。
ソースは修正済み。リリース待ちhttps://t.co/FTpJQKr2Sw
- unko-by-ryeからunkoにリネームしたが、
rye sync
が必要となった(逆に言えばリネームに伴うエラーはrye sync
で解決できた)
終わりに
Ryeを使って簡単なクソライブラリを作ってみました。
Experimentalなツールではありますが、開発者がやることはライブラリを書くだけになっていますね。
pyproject.tomlが生成されて配布可能になってますし、環境の管理はRyeが担ってくれます。
これは開発が継続されたら嬉しい人多いんじゃないですかね。
OSSで開発チームが組成されたり、PyPAの下に入ったり、道はないのかな。
(ただし、nikkie個人としてはちょっと音楽性の違いがあって、和解できていません。詳しくは別の記事で書こうかな)