0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uvを使ってPython環境を構築する

Last updated at Posted at 2024-11-22

概要

uvが便利と薦められたので使ってみた。

環境

  • macOS 14.7.1

インストール

Installation documentに従ってインストールする。

% curl -LsSf https://astral.sh/uv/install.sh | sh
% uv --version
uv 0.4.29 (85f9a0d0e 2024-10-30)
% echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc  # 補完スクリプト

下記を実行してuvをアップデートする。

% uv self update
info: Checking for updates...
success: Upgraded uv from v0.4.29 to v0.5.1! https://github.com/astral-sh/uv/releases/tag/0.5.1
% uv --version                                                 
uv 0.5.1 (f399a5271 2024-11-08)

Python管理

list

インストールされているpythonを確認する。

% uv python list 
cpython-3.13.0+freethreaded-macos-aarch64-none    <download available>
cpython-3.13.0-macos-aarch64-none                 /opt/homebrew/opt/python@3.13/bin/python3.13 -> ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.12.7-macos-aarch64-none                 /opt/homebrew/opt/python@3.12/bin/python3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12
cpython-3.12.7-macos-aarch64-none                 <download available>
cpython-3.11.10-macos-aarch64-none                <download available>
cpython-3.10.15-macos-aarch64-none                <download available>
cpython-3.9.20-macos-aarch64-none                 <download available>
cpython-3.9.6-macos-aarch64-none                  /Applications/Xcode.app/Contents/Developer/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3
cpython-3.8.20-macos-aarch64-none                 <download available>
pypy-3.10.14-macos-aarch64-none                   <download available>
pypy-3.9.19-macos-aarch64-none                    <download available>
pypy-3.8.16-macos-aarch64-none                    <download available>

install

pythonをインストールする。ここでは3.12をインストールした。

% uv python install 3.12
Installed Python 3.12.7 in 2.04s
 + cpython-3.12.7-macos-aarch64-none

3.12がインストールされているかを確認する。

% uv python list
cpython-3.13.0+freethreaded-macos-aarch64-none    <download available>
cpython-3.13.0-macos-aarch64-none                 /opt/homebrew/opt/python@3.13/bin/python3.13 -> ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.12.7-macos-aarch64-none                 /opt/homebrew/opt/python@3.12/bin/python3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12
cpython-3.12.7-macos-aarch64-none                 /Users/foo/.local/share/uv/python/cpython-3.12.7-macos-aarch64-none/bin/python3.12
cpython-3.11.10-macos-aarch64-none                <download available>
cpython-3.10.15-macos-aarch64-none                <download available>
cpython-3.9.20-macos-aarch64-none                 <download available>
cpython-3.9.6-macos-aarch64-none                  /Applications/Xcode.app/Contents/Developer/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3
cpython-3.8.20-macos-aarch64-none                 <download available>
pypy-3.10.14-macos-aarch64-none                   <download available>
pypy-3.9.19-macos-aarch64-none                    <download available>
pypy-3.8.16-macos-aarch64-none                    <download available>

プロジェクト管理

init

プロジェクトを新規作成する。

% uv init uv-sample-project  # フォルダを作成してプロジェクト作成
Initialized project `uv-sample-project` at `/Users/foo/uv-sample-project`

作成したフォルダ構成は下記のようになる。

% cd uv-sample-project
% tree -a
.
├── .git
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg.sample
│   │   ├── fsmonitor-watchman.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-commit.sample
│   │   ├── pre-merge-commit.sample
│   │   ├── pre-push.sample
│   │   ├── pre-rebase.sample
│   │   ├── pre-receive.sample
│   │   ├── prepare-commit-msg.sample
│   │   ├── push-to-checkout.sample
│   │   ├── sendemail-validate.sample
│   │   └── update.sample
│   ├── info
│   │   └── exclude
│   ├── objects
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       └── tags
├── .gitignore
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml

プロジェクトの情報を見てみる。

% cat .python-version
3.12
pyproject.toml
[project]
name = "uv-sample-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

Gitリポジトリの状態を見てみる。

% git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	.python-version
	README.md
	hello.py
	pyproject.toml
	uv.lock

nothing added to commit but untracked files present (use "git add" to track)

生成された.gitignoreは下記内容になっている。

.gitignore
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info

# Virtual environments
.venv

add

パッケージを追加してみる。

% uv add ruff  # ruffパッケージを追加
Using CPython 3.12.7
Creating virtual environment at: .venv
Resolved 2 packages in 376ms
Prepared 1 package in 628ms
Installed 1 package in 2ms
 + ruff==0.7.3
% uv pip list
Package Version
------- -------
ruff    0.7.3

ruffパッケージ追加前後のpyproject.tomlの差分

--- pyproject.toml.old	2024-11-09 18:46:23
+++ pyproject.toml	2024-11-09 18:47:49
@@ -4,4 +4,6 @@
 description = "Add your description here"
 readme = "README.md"
 requires-python = ">=3.12"
-dependencies = []
+dependencies = [
+    "ruff>=0.7.3",
+]

remove

インストールしたパッケージを削除してみる。

% uv remove ruff  # ruffパッケージを削除
Resolved 1 package in 22ms
Audited in 0.32ms

ruffパッケージ削除前後のpyproject.tomlの差分

--- pyproject.toml.old	2024-11-09 19:17:36
+++ pyproject.toml	2024-11-09 19:17:46
@@ -4,6 +4,4 @@
 description = "Add your description here"
 readme = "README.md"
 requires-python = ">=3.12"
-dependencies = [
-    "ruff>=0.7.3",
-]
+dependencies = []

sync

パッケージなどのpython環境を同期する。

% uv sync
Resolved 1 package in 14ms
Audited in 0.29ms

生成されたuv.lockの内容

uv.lock
version = 1
requires-python = ">=3.12"

[[package]]
name = "uv-sample-project"
version = "0.1.0"
source = { virtual = "." }

run

作成したPython環境で実行する。

hello.py
def main():
    print("Hello from uv-sample-project!")

if __name__ == "__main__":
    main()
% uv run hello.py
Hello from uv-sample-project!

仮想環境を有効化して実行する。

% source .venv/bin/activate
(uv-sample-project) % python --version
Python 3.12.7
(uv-sample-project) % python hello.py
Hello from uv-sample-project!

tool

コマンドラインツールを管理する。

% uv tool dir  # develop環境で使用するtoolの保存先
/Users/foo/.local/share/uv/tools
% uv tool install ruff  # toolとしてruffをインストール
Resolved 1 package in 169ms
Installed 1 package in 4ms
 + ruff==0.7.3
Installed 1 executable: ruff
warning: `/Users/foo/.local/bin` is not on your PATH. To use installed tools, run `export PATH="/Users/foo/.local/bin:$PATH"` or `uv tool update-zsh`.
% uv tool list  # インストールされているツールを列挙
ruff v0.7.3
- ruff

ruffパッケージ追加前後のpyproject.tomlの差分

--- pyproject.toml.old	2024-11-09 20:25:16
+++ pyproject.toml	2024-11-09 20:26:48
@@ -5,3 +5,6 @@
 readme = "README.md"
 requires-python = ">=3.12"
 dependencies = []
+
+[dependency-groups]
+dev = []

インストールしたruffツールを実行する。

% uv tool run ruff check hello.py  # ruffを実行
All checks passed!

おわり

まだ簡単に使い方を見てみただけなので、きちんと使い方を覚えたい。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?