0
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?

M1Macにuvをインストール

Posted at

なんの話か

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でスクリプトを実行した時に,依存関係を勝手にインストールして実行してくれるようになります.

手順はこのようになっています.

  1. icecreamを使ってhello_worldを表示するスクリプトを書きます.
  2. 依存環境をスクリプトに書き込みます.
  3. 実行してみます.

1. icecreamを使ってhello_worldを表示するスクリプトを書きます

before

python hello_world.py
from icecream import ic
ic("hello world")

2. 依存環境をスクリプトに書き込みます

akihirosuzuki@MacBookPro 01_uv % uv add --script hello_world.py "icecream"
Updated `hello_world.py`

すると,スクリプトがこのように書きかわっています.

after

python hello_world.py
# /// 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してみます.

  1. icecreaを使ってtorch.cuda.is_available()を表示するスクリプトを書きます.
  2. 依存環境をスクリプトに書き込みます.
  3. 実行してみます.

1. icecreaを使ってtorch.cuda.is_available()を表示するスクリプトを書きます

before

python check_torch.py
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`

スクリプトが書きかわっているのを確認します.

python 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がありません」の表示が消えました.

0
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
0
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?