はじめに
1日目お疲れさまでした!nikkieです。
登壇報告エントリです
目次
- はじめに
- 目次
- PEP 723(Inline script metadata)が拓く世界。Pythonスクリプトに必要な仮想環境をツールにおまかせできるんです!
- 発表後記
- 関連エントリ
- おまけ:発表中のテンションの秘密
- 変更履歴
PEP 723(Inline script metadata)が拓く世界。Pythonスクリプトに必要な仮想環境をツールにおまかせできるんです!
登壇予告
スライド
#pyconjp_1 15:50-「PEP 723(Inline script metadata)が拓く世界。Pythonスクリプトに必要な仮想環境をツールにおまかせできるんです!」のスライドです。 #pyconjp2024
— nikkie / にっきー 9/27 15:50- pyconjp_1 (@ftnext) 2024年9月27日
Pythonファイル(スクリプト)を書いている皆さん、めちゃ楽できるPEP 723をよろしくお願いします!https://t.co/pLsKbmWHzM
発表中のツイートまとめ
#pyconjp_1 OR #pyconjp2024 OR #pyconjp until:2024-09-27_16:45:00_JST
みたいな感じで掘り起こしたぞ
発表後記
聞きに来てくださった皆さま、ありがとうございました!
廊下や懇親会で感想を伝えてくださった方々、めちゃめちゃ嬉しかったです。ありがとうございます!
トークの司会のスタッフのトダさん(お名前失念 @t0d4)が、inline script metadataやuvを使っていらして、めっちゃいい感じで紹介してくださって最高の発表体験でした。
ありがとうございます!
質問して下さったスミスさん(@s3i7h)、懇親会でもいろいろ教えてくださって、コミュニティでPython開発環境の突っ込んだ話をしたかった私1としてはめちゃめちゃ楽しかったです。
ありがとうございました!
#pyconjp_1 聞いてくださった皆様、ありがとうございました
— nikkie / にっきー 9/27 15:50- pyconjp_1 (@ftnext) 2024年9月27日
質問(一部宿題)のメモ書き
・uvはプロジェクト内のスクリプト(inline script metadata)をどの仮想環境で実行するのか
・metadataの位置、先頭でなくとも?
・シバンにツールを書ける?
・テストスクリプトで使うのは?
(1) uv run <プロジェクトのscript.py (inline script metadataあり)>
はどう実行されるんでしょうね。
コマンドのリファレンスからだとどうにも判然としないような(自然言語特有の曖昧さ)。
https://docs.astral.sh/uv/reference/cli/#uv-run
(略) i.e.,
uv run file.py
is equivalent touv run python file.py
. If the script contains inline dependency metadata, it will be installed into an isolated, ephemeral environment.When used in a project, the project environment will be created and updated before invoking the command.
When used outside a project, if a virtual environment can be found in the current directory or a parent directory, the command will be run in that environment.
回答時に思い浮かべていたのは、以下のあたりのコードです
https://github.com/astral-sh/uv/blob/0.4.16/crates/uv/src/commands/project/run.rs#L105-L135
let script_interpreter = if let Some(script) = script { let (source, python_request) = if let Some(request) = python.as_deref() { // (1) Explicit request from user } else if let Some(file) = PythonVersionFile::discover(&project_dir, false, false).await? { // (2) Request from `.python-version` } else { // (3) `Requires-Python` in the script }; }
宿題をいただいた気持ちです(インプットする者に情報が集まる!)
(2) 別の質問:Pythonスクリプト(実行権限付き)のシバンに指定できるのか。
私はpython script.py
とインタプリタに渡して実行することがほとんどなので盲点でした。
PEP 723で見かけた覚えがあり
https://peps.python.org/pep-0723/#rationale
Such tools could be used as shebang lines on non-Windows systems e.g. #!/usr/bin/env hatch run.
動くか検証したり、ソースを覗いたりしてみようかな
(3) Exampleでメタデータは冒頭に書かれていましたが、
https://peps.python.org/pep-0723/#example
位置はどこでもよいですね2。
正規表現でパースするときに、最初の行が# /// script
で始まるパターンではなく、# /// script
で始まる行を探しているので、スクリプトの中にあれば位置はどこでもよいのだと思います。
ですが、個人的にはPEPの例にならって、また分かりやすいので、一番上に書きたいかなと思います
Pythonスクリプトを使っている皆さん、趣味で使っている方は今日から、業務で使っている方は次の営業日から、uv run
やhatch run
をぜひ使っていきましょう!
自動化スクリプト系の書籍にも採用されるといいな〜(おねがいおねがいおねがいおねがい)
関連エントリ
発表準備の様子がこのブログに残っています
おまけ:発表中のテンションの秘密
先日のPIXIV DEV MEETUPで自作したうちわも相乗効果です!
うちわデコった。
— nikkie / にっきー 9/27 15:50- pyconjp_1 (@ftnext) 2024年9月20日
今度のイベントでかざします!
#pixivdevmeetup pic.twitter.com/rIcTA3f8Lr
変更履歴
- 2024/09/29 スタッフさんのお名前を更新!
-
こういう意見交換をずっとしたかったんですよ
↩これなーー。個人的にはasdf(pyenv) + pdmを使ってる。
— s3i7h / スミス (@s3i7h) 2024年9月27日
poetryは先駆けとしてよかったけどパイオニア意識が強すぎちゃった印象。
hatchは大本営みたいな感じで出てきたけど色々汎用化頑張りすぎて重すぎる感ががが
uvは認識はしてたけど使ってなかった。今日色々見てて良さそうなのでちゃんと試す https://t.co/wXmovCFvCh - 検証 https://github.com/ftnext/pep723/commit/cc8c43f1149604e8ebc3db3f3b31dc234e7ac68a↩