1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PEP 723(Inline script metadata)を使っていこう

Last updated at Posted at 2025-12-19

PEP 723 というものがあることをつい先日知って、驚愕しました。

上の記事だけでも呼んでくれると、その凄さを実感できると思います。

依存関係の共有方法

Python コードを共有する際、「このライブラリに依存しているよ!」ということを伝えないと python test.py でエラーを見ることになります。多分うんざりするほど見ていると思います。

これを解決する方法がいくつかあります。

requiements.txt/venv

requirements.txt を定義しておき、pip install -r requirements.txt とすることで、必要なライブラリを導入することが出来ます。

現在は既に非推奨かと思いますが、グローバルの環境でこれをやると、後々バージョンの衝突(ライブラリ B を動かすにはライブラリ A のバージョン 1.x 未満である必要があるが、ライブラリ C を動かすにはライブラリ A のバージョン 2.0 以上である必要がある)が起きます。

venv というものを用いることで、プロジェクト(特定ディレクトリ配下で~といったイメージ)に仮想環境として環境を分けて利用が可能です。

Poetry/Rye

共にパッケージ管理ツールと呼ばれるもので、venv をより進化させたようなものです。
プロジェクトごとに依存関係を整理する場合に非常に強力で、下記で比較を行ってくれています。

PEP 723(Inline script metadata) による依存関係の共有

本題です。もしあなたの環境に uv/pipx が入っているのであれば、これが使えると思います。

ソースコードに依存関係を書いてしまおう!というものです。

test.py
# /// script
# requires-python = ">=3.10"
# dependencies = [
#     "cowsay",
# ]
# ///

import cowsay

def main():
    message = "PEP 723 is awesome!\nNo manual pip install needed."

    cowsay.tux(message)

if __name__ == "__main__":
    main()

これで動きます。

$ uv run test.py
Installed 1 package in 5ms
  _____________________________
 /                             \
| PEP 723 is awesome!           |
| No manual pip install needed. |
 \                             /
  =============================
                                  \
                                   \
                                    \
                                     .--.
                                    |o_o |
                                    |:_/ |
                                   //   \ \
                                  (|     | )
                                 /'\_   _/`\
                                 \___)=(___/

流石にプロジェクトにおいて利用するには向いてないと思います。一方で、スクリプト単体を共有する、別のプログラミング言語で開発しているプロジェクトにおいて、部分的に Python によるスクリプトを採用する、といったケースでは有用です。

まとめ

  • PEP 723 にてソースコードに依存関係の記述が可能に(デモとしては用意しませんでしたが、勿論ライブラリのバージョン指定も可能です)
  • 「プロジェクト単位で依存関係を共有する」よりは「スクリプト単位で依存関係を共有する」
  • 事前処理は不要で uv run script.py でライブラリのインストールから実行までやってくれます
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?