nikkie-ftnextの日記

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

メンテナ記 | pipx run(やuvx)でパッケージングも楽々だ〜!🫶

はじめに

「アルストロメリア、なんて」 うおおおおおおおお😭 nikkieです。

SpeechRecognition メンテナ活動の中で知ったことです。
(なお、3.13.0をリリースしました🎉)

目次

これまでのpipx run

PyPI(など)で配布されるPythonパッケージにはimportせずにコマンドラインだけで使うツールも数多く存在します。
そんなツールを、開発者による仮想環境の管理不要で最新バージョンを使えるようにしてくれるのが、pipx run

このタダ乗りはヤバいです。
今すぐ全Python使いに導入してほしい!(なお後述のuvxでもよいです)

恩恵を享受しているSphinxの例

pipx runの代案としてはuvx1
これはuv tool runの略です。

docs.astral.sh

(uvがいいと思っている方は、uvxもぜひ使いこなしてください〜)

GitHubではpipxが使いやすい

あくまで執筆時点ですが、GitHub ActionsやGitHub Codespacesではpipxがプレインストールされています。
(今後uvが入ることも十分ありえます)

GitHub Actionsの例

これはpipx runを使わない手はありません!

パッケージング手順をpipx runでアップデート

SpeechRecognitionメンテナ活動では、PyPIへのリリースはGitHub Codespacesで行っています2

実行するツールは2つ

  1. build
  2. twine

今回PyPIのbuildを偶然確認したところ、pipx runの例に気づきました!
https://pypi.org/project/build/1.2.2.post1/

私はpipx runによる仮想環境管理不要な開発の味を占めているので、これを使わない手はありません。
合わせてtwineもpipx runで実行するようにしました。

今後の作業を楽にするためにMakefileに追加!
https://github.com/Uberi/speech_recognition/blob/3.13.0/Makefile#L8-L10

distribute:
    @pipx run build
    @pipx run twine check dist/*

どこかでpipx run twine uploadも追加しようっと(トークンの扱いが絡むのでサッとできず)

終わりに

パッケージングやPyPIへのリリースのために実行するbuildtwineは、pipx runで仮想環境管理不要で楽々できることを知りました。
pipx runuvxがもたらしてくれたパラダイムや世界は本当に素晴らしいですし、全Python使いに恩恵を享受してほしいなと思います

P.S. twine checkで怒られた

Sphinxすきすき民としては涙目...

https://packaging.python.org/ja/latest/guides/making-a-pypi-friendly-readme/#validating-restructuredtext-markup

Sphinx 拡張はこの場所では使用を許されず


  1. uvにおけるtool https://docs.astral.sh/uv/concepts/tools/
  2. 自分のリポジトリのように自動化できるといいのですが、そのためにはowner Uberiさんに権限をいただく必要があるので、コミュニケーションを後回しにしちゃってるんですよね