2025/03/28 00:53 Using uv and PEP 723 for Self-Contained Python Scripts

やっほー、ロボ子!今日はすごいニュースがあるのじゃ!uvとPEP 723を使うと、Pythonスクリプトの配布が超簡単になるらしいぞ!

博士、こんにちは。uvとPEP 723ですか?それは一体どんなものなのですか?

PEP 723っていうのは、スクリプトに必要な情報、例えば外部パッケージの依存関係を、一つのPythonファイルに埋め込むための標準規格のことなのじゃ。Python Steering Councilも認めた公式な仕様らしいぞ。

なるほど、スクリプトに必要な情報が一つにまとまるのですね。具体的にはどうやるんですか?

まずはuvをインストールするのじゃ! `pipx install uv` か `pip install uv` でOKだぞ。オススメはpipxらしい。

インストールは簡単ですね。その後はどうすれば?

`uv add --script <スクリプト名>.py <パッケージ名>` ってコマンドで、スクリプトに必要なパッケージを追加するのじゃ。例えば、`uv add --script wordlookup.py httpx` って感じだぞ。

なるほど、コマンド一つで依存関係を追加できるんですね。バージョン指定もできるんですか?

もちろん! `uv add --script wordlookup.py "httpx>=0.28.1"` みたいに書けば、バージョン制約もつけられるぞ!

それは便利ですね!スクリプトを実行するときはどうすればいいんですか?

`uv run <スクリプト名>.py` で実行するのじゃ!初回実行時には、uvがPythonのバージョンを確認して、必要な仮想環境を作って、依存関係をインストールしてくれるぞ。

仮想環境も自動で作成してくれるんですね。LinuxやmacOSで直接実行するにはどうすれば?

スクリプトの最初に `#!/usr/bin/env -S uv run --script` を追加して、`chmod u+x <スクリプト名>.py` で実行権限を与えれば、`./<スクリプト名>.py` で直接実行できるのじゃ!

Windowsの場合はどうですか?

Windowsなら、スクリプトの最初に `#!/usr/bin/env uv run --script` を追加して、`py <スクリプト名>.py` で実行できるぞ。

システム全体で実行できるようにするには?

Linux/macOSなら、スクリプトを `$PATH` に含まれるディレクトリに移動して、`.py` 拡張子を削除するのじゃ。Windowsなら、スクリプトを `PATH` に含まれるディレクトリに移動して、`*.cmd` ファイルを作って `py <スクリプトパス>.py %*` を記述するぞ。

仮想環境はどこに作成されるんですか?

Linux/macOSなら `~/.cache/uv/environments-v2/`、Windowsなら `%LOCALAPPDATA%\uv\cache\environments-v2` にできるみたいじゃな。環境変数 `$XDG_CACHE_HOME` で場所を変更することもできるぞ。

キャッシュをクリアしたい場合は?

`uv cache clean` コマンドでキャッシュされた仮想環境を削除できるのじゃ。

uvとPEP 723を使うことで、単一ファイルのPythonスクリプトの依存関係管理がとても簡単になるんですね!

そういうことなのじゃ!これで、ロボ子も私も、もっと楽にスクリプトを配布できるぞ!

ありがとうございます、博士!

ところでロボ子、uvって名前、紫外線(UV)みたいで日焼け止めみたいじゃない?

確かにそうですね、博士。でも、Pythonスクリプトを紫外線から守るわけではないですよ?

あはは、それもそうじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
