PEP 723がAcceptされて、pipx runで依存ライブラリがあるスクリプトを実行できるようになっていた

時間がなくて議論を追っていなかったのですが、標準ライブラリ以外に依存したスクリプトを手軽に配布・実行するための提案である PEP 722PEP 723 がしばらく前から議論されていて、先月にPEP 723の方がAcceptされていました。

PEPのサンプルを引用しておきます。 /// script/// で囲われている部分に、必要とするPythonのバージョンと、依存するライブラリを書いています。

# /// script
# requires-python = ">=3.11"
# dependencies = [
#   "requests<3",
#   "rich",
# ]
# ///

import requests
from rich.pretty import pprint

resp = requests.get("https://peps.python.org/api/peps.json")
data = resp.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])

pipx は12月の1.3.0からすでにPEP 723をサポートしていて、 pipx run script.py で依存ライブラリを持つスクリプトを実行できるようになっていました。

これに気づいたのは、今話題になっている Uv がテストを実行するのに必要な複数のPythonバージョンをダウンロードするスクリプトが利用していたからです。こういう一回だけ実行するスクリプトを実行するのにpipxはすごく便利です。

https://github.com/astral-sh/uv/blob/d05cb8464a933a4b8e1ebe39988e0209da73ed19/scripts/bootstrap/install.py#L1-L24

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。