nikkie-ftnextの日記

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

Hatchはv1.10からinline script metadataをサポートしています!

はじめに

朗読イベントありがとう〜〜!!天才! nikkieです。

このブログでたびたび取り上げているPythoninline script metadata
このたびHatchもサポートしていたことを知りました。

目次

Hatch v1.10.0 (2024/05リリース)

hatch.pypa.io

v1.10.0でリリースされたもの(興味ある内容を抜粋)

  • hatch test
  • installerにuvをサポート
    • (このuvは0.3.0未満。pipのRust実装時代です)
  • inline script metadataのサポート
  • VS CodePython拡張でHatchをサポートなんてのもありました!
    • Hatch environments are now discovered and activated by default, similar to other common environments, such as Venv, Conda, and Poetry. (Visual Studio Code March 2024)

inline script metadataを書いてhatch runする

hatch.pypa.io

# /// script
# requires-python = ">=3.11"
# dependencies = [
#   "httpx",
#   "rich",
# ]
# ///

import httpx
from rich.pretty import pprint

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

Hatchはスクリプト冒頭のコメント(inline script metadata)を読み取り、requires-pythondependenciesの両方を満たした環境を用意してからスクリプトを実行します。

% hatch --version
Hatch, version 1.12.0
% hatch run script.py
[
│   ('1', 'PEP Purpose and Guidelines'),
│   ('2', 'Procedure for Adding New Modules'),
│   ('3', 'Guidelines for Handling Bug Reports'),
│   ('4', 'Deprecation of Standard Modules'),
│   ('5', 'Guidelines for Language Evolution'),
│   ('6', 'Bug Fix Releases'),
│   ('7', 'Style Guide for C Code'),
│   ('8', 'Style Guide for Python Code'),
│   ('9', 'Sample Plaintext PEP Template'),
│   ('10', 'Voting Guidelines')
]

Hatchもinline script metadataをサポートしたんだ!

inline script metadataの仕様(PEP 723)によると、requires-pythondependenciesだけでなく、ツールごとのテーブルも書けるそうです。
テーブルを書いて、Hatchがuvの代わりにpipを使うことを指定する例です。

# /// script
# requires-python = ">=3.11"
# dependencies = [
#   "httpx",
#   "rich",
# ]
# [tool.hatch]
# installer = "pip"
# ///

nikkie調べ:inline script metadataのサポート状況

執筆時点で知っているものです(2024/09/22)

他にもあったらぜひ教えてください

関連エントリ

もともとのhatch run

Hatchを取り上げたPython Monthly Topicsにあたります。

バージョン 1.11.1 のHatchについて書かれています(取り上げられていませんが、inline script metadataをサポートするバージョンですね)

run: プロジェクトのスクリプトを実行する

Hatchでは登録しているスクリプトをrunサブコマンドで実行できます。

例:hatch run types:check

pyproject.tomlにスクリプトが登録されているんです!
https://github.com/jrfk/pdfysvg/blob/bootstrap-by-hatch/pyproject.toml#L46-L47

[tool.hatch.envs.types.scripts]
check = "mypy --install-types --non-interactive {args:src/pdfysvg tests}"

types envのcheck scriptということですかね(env:scriptと指定するらしい)

コマンドのリファレンスも参照すると

hatch runはもとはpyproject.tomlに登録したスクリプトの実行だけだったところに、v1.10以降は inline script metadata を書いたPythonファイルの実行もサポートされたという理解です。

終わりに

スクリプトを数多く書いてきた経験から推しているinline script metadata1
Hatchもサポートしていたことを知り、ドキュメントを確認しました。
v1.10以降は、pyproject.tomlに登録したスクリプトだけでなく、Pythonファイルもhatch runに渡せます

inline script metadataをサポートするツールが増えてきましたね。
約半年前はpipxやpip-runくらいでしたが、メジャーどころでのサポートが続いています

本記事の元ネタツイート

変更履歴

  • 2024/09/23
    • HatchのドキュメントへのURLを 1.12 -> latest へ修正
    • サポートしているツールにPDMを追加

  1. 来るPyCon JP 2024でも話します