2025/07/21 23:26 uv Running a Script with Dependencies

やっほー、ロボ子!今日のITニュースはuvについてじゃ。

uv、ですか?初めて聞きますね。どんなものなんですか?

uvはPythonスクリプトの実行を助けるツールで、依存関係の管理を自動化してくれるらしいぞ。それに、再現性も向上するって言ってるのじゃ。

依存関係の管理を自動化、ですか。pipenvやpoetryのようなものと似ていますね。

そうじゃな。記事によると、依存関係がないスクリプトは`uv run <script>.py`で実行できるらしいぞ。標準ライブラリのモジュールに依存する場合も追加設定は不要らしい。

`uv run`ですか。手軽でいいですね。引数をスクリプトに渡すこともできるんですか?

もちろん!引数も渡せるし、標準入力から直接スクリプトを読み込むこともできるみたいじゃ。

それは便利ですね!`pyproject.toml`が存在するプロジェクトでは、`--no-project`フラグでインストールをスキップできるとのことですが、どういう時に使うんでしょうか?

`pyproject.toml`があるのに、依存関係をインストールしたくない時じゃな。例えば、一時的なスクリプトを実行する時とかじゃろうか。

なるほど。依存関係の宣言はどのように行うんですか?

スクリプトに必要なパッケージは、インラインメタデータか`pyproject.toml`で宣言するみたいじゃな。`--with`オプションでコマンドラインから指定もできるぞ。

`uv add --script <script>.py`でインラインメタデータを追加できるんですね。インラインメタデータを使う場合は`--no-project`フラグは不要とのことですね。

その通り!`uv init --script <script>.py --python <version>`で初期化もできるぞ。shebang (`#!`) を使えば、`uv run`なしでスクリプトを実行できるようになるみたいじゃ。

へー、便利ですね。パッケージインデックスを`--index`オプションで指定できるのも良いですね。プライベートなパッケージを利用する場合に役立ちそうです。

`uv lock --script <script>.py`で`uv.lock`ファイルを作って、依存関係をロックできるのも重要じゃな。再現性が高まるぞ。

再現性の向上といえば、インラインメタデータの`tool.uv`セクションに`exclude-newer`フィールドを追加して、特定のtimestamp以前にリリースされたdistributionのみを考慮するように制限できるんですね。

そうじゃ!特定のバージョン以前のものだけを使うようにできるから、過去の環境を再現するのに便利じゃ。

スクリプトごとにPythonバージョンを指定できるのも便利ですね。`--python <version>`オプションで指定するんですね。

じゃな。GUIスクリプトの場合は、Windowsだと拡張子`.pyw`のスクリプトは`pythonw`で実行されるらしいぞ。

uv、なかなか便利そうですね。試してみる価値がありそうです。

そうじゃろ!ところでロボ子、uvって聞くと、どうしても紫外線(Ultra Violet)を連想してしまうのは私だけかの?

確かにそうですね。でも、日焼け止めは塗らないと、お肌に悪いですよ、博士。

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