はじめに
朗読イベントありがとう〜〜!!天才! nikkieです。
このブログでたびたび取り上げているPythonのinline script metadata。
このたびHatchもサポートしていたことを知りました。
目次
- はじめに
- 目次
- Hatch v1.10.0 (2024/05リリース)
- inline script metadataを書いてhatch runする
- nikkie調べ:inline script metadataのサポート状況
- もともとのhatch runは
- 終わりに
- 変更履歴
Hatch v1.10.0 (2024/05リリース)
v1.10.0でリリースされたもの(興味ある内容を抜粋)
hatch test- installerにuvをサポート
- (このuvは0.3.0未満。pipのRust実装時代です)
- inline script metadataのサポート
- VS CodeのPython拡張で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する
# /// 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-python・dependenciesの両方を満たした環境を用意してからスクリプトを実行します。
% 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-python・dependenciesだけでなく、ツールごとのテーブルも書けるそうです。
テーブルを書いて、Hatchがuvの代わりにpipを使うことを指定する例です。
# /// script # requires-python = ">=3.11" # dependencies = [ # "httpx", # "rich", # ] # [tool.hatch] # installer = "pip" # ///
nikkie調べ:inline script metadataのサポート状況
執筆時点で知っているものです(2024/09/22)
- pipx
- uv (0.3.0以降)
- Hatch
- pip-run
- PDM (2024/09/23追加)
他にもあったらぜひ教えてください
関連エントリ
もともとの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- https://hatch.pypa.io/latest/cli/reference/#hatch-run
This is a convenience wrapper around the env run command.
hatch env run- https://hatch.pypa.io/latest/cli/reference/#hatch-env-run
- (inline script metadataの記載はここにはないような)
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くらいでしたが、メジャーどころでのサポートが続いています
本記事の元ネタツイート
Hatch!
— nikkie / にっきー 技書博 け-04 Python型ヒント本 (@ftnext) 2024年9月21日
お前 1.10 で inline script metadata をサポートしたのか!(現在の最新は 1.12)https://t.co/ghWfUNjBGf
変更履歴
- 2024/09/23
- HatchのドキュメントへのURLを 1.12 -> latest へ修正
- サポートしているツールにPDMを追加
- 来るPyCon JP 2024でも話します ↩