🐍

uvの使い方とインストール

2024/12/17に公開

概要

uvのインストールからサンプルの作成まで

参考資料(元記事)

手順

uvをインストールする: https://docs.astral.sh/uv/guides/projects/

curl -LsSf https://astral.sh/uv/install.sh | sh

# 反映
source $HOME/.local/bin/env

# シェル補完を追加
echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc

実際に作ってみる

すでにあるプロジェクトに作る場合は

uv init

でOK

❯ tree
.
├── README.md
├── hello.py
└── pyproject.toml

1 directory, 3 files

pyproject.tomlhello.py が作成された

hello.pyを実行するには

uv run python hello.py

# これでもOK
uv run hello.py

でOK

ライブラリの追加は add で行う

uv add click

# 開発環境のみにインストール
uv add --dev ruff

uvはrun時にsyncしてくれるので明示的にsyncしなくても良いらしい

開発環境にのみで使うパッケージについて

LinterやFormatterなど開発環境でのみ使うパッケージの実行方法が複数ある

  • uv add --dev: 開発環境を整える場合
    • 例: uv add --dev ruff
      • uv run ruff check hello.py
      • pyproject.tomlに追記される
      • uv sync --no-dev で実行環境になるためruffは消える
  • uv tool install: ローカルにパッケージをインストールして横断で使う場合
    • 例: uv tool install ruff
      • uv tool run ruff check hello.py or uvx ruff check hello.py
    • 実はインストールしなくても実行できる(↓参照)
  • uv tool run , uvx : とりあえず実行できればOKの場合
    • 例: 特に uvx ruff check hello.py

とはいえ、普通のプロジェクト以上では uv add --devになるのでは

--with で複数ツールを実行できる

Qiitaの元記事に合わせてファイルを同じ環境に準備

hello.py

def hello() -> str:
    return "Hello from uv-sample-project!"

def main():
    print(hello())

if __name__ == "__main__":
    main()

test_hello.py

import hello

def test_hello():
    assert hello.hello() == "Hello from uv-sample-project!"

テストしてみる

uvx --with pytest-cov pytest --cov

Discussion