PyCon JP 2024

PEP 723(Inline script metadata)が拓く世界。Pythonスクリプトに必要な仮想環境をツールにおまかせできるんです!
2024-09-27 , 20F Track1

皆さんは「PEP 723 – Inline script metadata」(応募時 Status: Final)をご存知ですか?
私の中ではこれはかなりインパクトの大きいPEPです。
Pythonでスクリプトを書くときの世界がガラッと変わる内容なんです!

Pythonでプロジェクトを開発するとき、仮想環境を使いますよね。
開発者が作って有効にすることもあれば、それをPoetryやHatchなどのツールに任せることもあると思います。
Pythonスクリプトの開発でも同様に仮想環境を使います。
PEP 723が劇的なのは、Pythonスクリプトの動作に必要な依存パッケージを、ツール側で自動で仮想環境にインストールしてスクリプトを動かしてくれるんです!
開発者はスクリプトのための仮想環境の操作から解放されるんですよ!!

私はPEP 723を部分的にサポートしたpipx(pipx run)を愛用しています。
その中で見えてきた使いこなしtipsと合わせて、皆さんをPEP 723を覗くクイックツアーへご案内します。
ちょっとしたスクリプトがすっごく書きやすくなりますよ〜


PEP 723とは

ref: https://peps.python.org/pep-0723/#example

# /// script
# 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])

このスクリプトを動かすにはrichやrequestsが必要です。
かつての私は仮想環境を作り、pip install rich requestsしてからスクリプトを動かしていました。

pipxは1.4.2からPEP 723を(部分的に)サポートしており、上のスクリプトは仮想環境を作ることなくpipx run example.pyと実行できます!
何が起こっているかと言うと

  1. pipxがInline script metadata(/// scriptのコメント)を解釈
  2. pipxが管理する仮想環境にdependenciesをインストール
  3. 2の仮想環境を有効にしてスクリプトexample.pyを実行

開発者が仮想環境を操作不要なんです!(pipxに任せなさい🙌)

この世界を一緒に見ていく30分としたいと思います

アウトライン

自己紹介・まとめ、それぞれ1分ずつ(2分)

PEP 723の紹介(8分)

  • Inline script metadataの仕様について
  • dependencies
  • requires-python
  • 提案経緯
  • 実装例(手短に)

PEP 723を実装するツールの紹介(13分)

  • pip-run(手短に)
  • pipx
    • (dependenciesのみの限定サポートですが、とても便利です!)
    • pipxとはどんなツールか
    • pipx自体のインストールについて
    • pipx install(手短に)
    • pipx run
  • PEPによると、Hatchなどもサポートが予定されているので9月時点の最新情報を盛り込みます

PEP 723をサポートしたpipxでPythonスクリプトを開発・実行しての学びの共有(7分)

  • よい点1:一度動けば他の開発者の手元でも動く(環境の変化に強い)
  • よい点2:簡単に依存ライブラリを追加できる

使いこなしtips
* python -i相当のことをやるには?(pipxのソースコードリーディングから)
* エディタ(VS Code)で補完があたるようにするには?


Why did you choose this topic?

PEP 723はめちゃめちゃ熱いPEPだと思っていまして、とにかく多くのPython使いに知っていただいて皆さんでその便利さを享受していただきたく、選びました。
ちょっとした自動化でシェルスクリプト代わりにPythonスクリプトを書くことが結構あるのではないかと思うのですが、PEP 723を知っておくとめちゃめちゃ恩恵にあずかれますよ〜

Knowledges and know-how the audience can get from your talk

聞いた方の多くに「pipx run script.py 便利そうだし、やってみるか」と思ってもらえるように話します(会場でやってみてほしい!)

  • PEP 723(Inline script metadata)のざっくりした理解
  • pipxというツールで何ができるか
  • pipx run script.pyまわりのtips
Prior knowledges speakers assume the audience to have
  • Pythonのチュートリアルを修了されている(例:Python Boot Campテキスト)
  • ふだん仮想環境を作って開発している

「PEPなんて読んだこともない」「pipxなんて初耳」そんなあなたも大丈夫です!
Pythonスクリプトを書く方に経験レベルによらずに広く知っていただきたくお話しします。
スクリプトを書くときに仮想環境が(開発者の操作)不要になることをぜひ知りにきてください!

Audience experiment

Beginner

Language of presentation

日本語

Language of presentation material

日本語

See also: 発表スライド

にっきーです

Nikkie began his career as a software engineer in 2016.

He started Python as a hobby in 2017 and fell in love with it.

He is engaged in Natural Language Processing as a data scientist at Uzabase, inc. Tokyo, Japan from 2019.

He is working on the Python community in Japan as a staff of the following event:

He gave talks at many PyCons in Japan and abroad.

He loves anime (Japanese animetation) as much as Python, and implements ideas related to some anime with Python.