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

Python プロジェクト管理したくて uv に触れてみたメモ

Posted at

これは何

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 以後だった。リリースノートの通りのようだった

❯ 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の環境を整えるのがだいぶ楽になった気がする
2
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
2
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?