これは何
2024の春先だっただろうか、pythonを使った開発を新しく始めようと思ったとき、環境管理何がいいのかなー?と調べていたところ、2024のトレンドは rye だ!という情報を沢山見ていたが、最近改めて調べ直してみると uv がトレンドだという話題を見て触ったことないなと思ったので python素人の自分が uv を触ってみたメモ
uv について
自分はPython界隈の事情に一切詳しくないので、正しく解釈できていないかもしれないが、ざっと調べた限りでは uv は rye の後継ツールで、rye は終わり、uv へ移行している過渡期のようだった。なら、これから始めるなら rye より uv の使い方を覚えるのが良さそうと感じた
uv をインストールしてみる
手元の環境(win11+wsl2+ubuntu) には brewを導入済みなので brew install uv
でよかった。
他にも色々インストール方法はありそうだった https://github.com/astral-sh/uv
uv を使ってプロジェクトを初期化する
qiitaも含め、uvに関する多くの記事を見ると、uv init example
とすることでプロジェクトの初期化を行えるようだったが、手元で試していて解せぬ疑問が一つ出てきた。
ホウボウを見て回った限りの uv の参考記事では uv init example
するとプロジェクトフォルダ中に src
ディレクトリが作られると書かれているのだが、何度試しても手元の初期化直後のツリーに src
ディレクトリが無い。
❯ uv init example
❯ cd example
❯ tree
.
├── README.md
├── hello.py
├── pyproject.toml
└── uv.lock
どうして... と途方に暮れて 小一時間悩んでいましたが下記のブログ記事に助けられました
- uv 0.4.0 リリースノートより、Pythonプロジェクトの扱いの変更。再配布可能にするかを--appや--libフラグで指定する
- uv 0.4.0 リリースノート: https://github.com/astral-sh/uv/releases/tag/0.4.0
いわれて見ると、確かに自分の手元の uv は 0.4 以後だった。リリースノートの通りのようだった
❯ uv --version
uv 0.4.30 (Homebrew 2024-11-05)
0.4.0以後で src
ディレクトリを初期化時に作成したい場合は --lib
をつけると良さそうだった。
uv init
のhelpにも記載があった。色々オプションがあるらしい
❯ uv init --help
Create a new project
Usage: uv init [OPTIONS] [PATH]
Arguments:
[PATH] The path to use for the project/script
Options:
--name <NAME> The name of the project
--package Set up the project to be built as a Python package
--no-package Do not set up the project to be built as a Python package
--app Create a project for an application
--lib Create a project for a library
--script Create a script
--vcs <VCS> Initialize a version control system for the project [possible values: git, none]
--build-backend <BUILD_BACKEND> Initialize a build-backend of choice for the project [possible values: hatch, flit, pdm, setuptools, maturin, scikit]
--no-readme Do not create a `README.md` file
--author-from <AUTHOR_FROM> Fill in the `authors` field in the `pyproject.toml` [possible values: auto, git, none]
--no-pin-python Do not create a `.python-version` file for the project
--no-workspace Avoid discovering a workspace and create a standalone project
...
気を取り直して --lib
をつけて初期化を再度実行してみた
❯ uv init example --lib
❯ cd example
❯ tree
.
├── README.md
├── pyproject.toml
└── src
└── example
├── __init__.py
└── py.typed
3 directories, 4 files
無事にsrc
フォルダを含むプロジェクトフォルダを作成することができた。
src
フォルダを使って配布用の何かを作るとは限らないが 気になった差分は解消できた
uv の環境を触る
https://github.com/astral-sh/uv を見て色々触る
バージョン確認
❯ uv --version
uv 0.4.30 (Homebrew 2024-11-05)
プロジェクト初期化
uv init example
venv作成、パッケージの同期
uv sync
プロジェクトにツールやパッケージ追加
❯ uv add ruff
❯ uv run ruff --version
ruff 0.7.2
❯ uv run ruff check
All checks passed!```
ruff は高速な pythonの静的コード解析ツール
仮想環境のアクティベート
. .venv/bin/activate
仮想環境でpython実行
❯ python -V
Python 3.13.0
❯ python hello.py
Hello from example!
ディアクティベートで仮想環境を抜ける
deactivate
仮想環境に入らず仮想環境のPythonを実行
❯ uv run python -V
Python 3.13.0
❯ uv run python hello.py
Hello from example!
仮想環境に入った状態と入っていない状態
uv add ruff しても仮想環境に入っていない状態では直接呼べない
❯ ruff --version
zsh: command not found: ruff
activate して仮想環境に入ると直接呼べる
❯ . .venv/bin/activate
❯ ruff --version
ruff 0.7.2
uvx 使ってエフェメラル環境でツールを実行する
❯ uvx pycowsay 'hello world!'
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
感想
- 初めて触ったが、手軽に扱えてコマンドの実行も高速なのが良かった
- pythonの環境を整えるのがだいぶ楽になった気がする