なんの話か
M1Macにuvをインストールしてhello_worldを出力する話です.
環境
環境 | バージョン等 |
---|---|
OS | macOS Sequoia 15.1.1 |
チップ | Apple M1 |
エディタ | VSCode 1.96.2 |
なお,2025年2月3日時点でuv==0.5.26
でした.
インストール
公式のインストールページに従ってインストールする.
curl -LsSf https://astral.sh/uv/install.sh | sh
記録取り忘れましたがヌルッとインストール完了です.
パスを自分で通すorターミナル立ち上げ直すと,uvが使えるようになっている
とあったので,一度ターミナルを立ち上げ直して,インストールされていることを確認する.
akihirosuzuki@MacBookPro install % uv
An extremely fast Python package manager.
Usage: uv [OPTIONS] <COMMAND>
...以下略
続いて,シェルのオートコンプリート機能を使うために下記のコマンドを実行
echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc
echo 'eval "$(uvx --generate-shell-completion zsh)"' >> ~/.zshrc
デフォルトのpythonが3.12.5だったのでデフォルトとは異なるpython==3.10
をインストールする
akihirosuzuki@MacBookPro 01_uv % uv python install 3.10
Installed Python 3.10.16 in 2.73s
+ cpython-3.10.16-macos-aarch64-none
これで基本的な準備は完了です.(たぶん)
hello world
hello_worldしてみます.
依存環境をスクリプトに書き込む
スクリプトが依存している環境を書き込むことができるようですので,それを試してみます.
要するにどうなるか,と言いますと,uv run hoge.py
でスクリプトを実行した時に,依存関係を勝手にインストールして実行してくれるようになります.
手順はこのようになっています.
- icecreamを使ってhello_worldを表示するスクリプトを書きます.
- 依存環境をスクリプトに書き込みます.
- 実行してみます.
1. icecreamを使ってhello_worldを表示するスクリプトを書きます
before
from icecream import ic
ic("hello world")
2. 依存環境をスクリプトに書き込みます
akihirosuzuki@MacBookPro 01_uv % uv add --script hello_world.py "icecream"
Updated `hello_world.py`
すると,スクリプトがこのように書きかわっています.
after
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "icecream",
# ]
# ///
from icecream import ic
ic("hello world")
3. 実行してみます.
akihirosuzuki@MacBookPro 01_uv % uv run hello_world.py
Installed 5 packages in 12ms
ic| 'hello world'
icecreamがインストールされて,hello worldが出力されました.
他の依存関係のあるライブラリを追加してみる
ここでは,定義したライブラリが他に依存関係を持っていてもそちらは考慮してくれない,というのを確かめます.
複雑な依存関係を持つライブラリは多いです.特に科学計算系のライブラリはnumpyが必須のことも多いですね.
試しにtorchをaddしてみます.
- icecreaを使って
torch.cuda.is_available()
を表示するスクリプトを書きます. - 依存環境をスクリプトに書き込みます.
- 実行してみます.
1. icecreaを使ってtorch.cuda.is_available()
を表示するスクリプトを書きます
before
import torch
from icecream import ic
ic(torch.cuda.is_available())
2. 依存環境をスクリプトに書き込みます
akihirosuzuki@MacBookPro 01_uv % uv add --script check_torch.py "torch" "icecream"
Updated `check_torch.py`
スクリプトが書きかわっているのを確認します.
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "icecream",
# "torch",
# ]
# ///
import torch
from icecream import ic
ic(torch.cuda.is_available())
3. 実行してみます.
akihirosuzuki@MacBookPro 01_uv % uv run check_torch.py
Installed 14 packages in 220ms
/Users/akihirosuzuki/.cache/uv/archive-v0/_3rDiqNx6H9uHQ8MQ_6O5/lib/python3.10/site-packages/torch/_subclasses/functional_tensor.py:275: UserWarning: Failed to initialize NumPy: No module named 'numpy' (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/utils/tensor_numpy.cpp:81.)
cpu = _conversion_method_template(device=torch.device("cpu"))
ic| torch.cuda.is_available(): False
14個のパッケージがinstallされています.
ただし「numpyがありません」と怒られています.
4. おまけ:numpyを追加してみる
numpyを加えてみます.
akihirosuzuki@MacBookPro 01_uv % uv add --script check_torch.py "torch" "icecream" "numpy"
Updated `check_torch.py`
再度スクリプトを実行してみます.
akihirosuzuki@MacBookPro 01_uv % uv run check_torch.py
Installed 15 packages in 396ms
ic| torch.cuda.is_available(): False
installされているパッケージが15に増えています.
そして前述の「numpyがありません」の表示が消えました.