Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonのパッケージマネージャー「uv」

 Pythonのパッケージマネージャー「uv」

Masafumi Abeta

October 30, 2024
Tweet

More Decks by Masafumi Abeta

Other Decks in Programming

Transcript

  1. © 2024 Masafumi Abeta 2 uvとは Pythonの バージョン管理 仮想環境作成 パッケージ管理

    pip ✓ venv ✓ pyenv ✓ Pipenv ✓ ✓ Poetry ✓ ✓ conda ✓ ✓ ✓ uv ✓ ✓ ✓ https://github.com/astral-sh/uv
  2. © 2024 Masafumi Abeta 3 # On macOS and Linux.

    $ curl -LsSf https://astral.sh/uv/install.sh | sh # On Windows. $ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # With pip. $ pip install uv # Update $ uv self update $ uv --version uv 0.4.27 uvのインストール
  3. © 2024 Masafumi Abeta 4 $ uv python install 3.10

    3.11 3.12 Searching for Python versions matching: Python 3.10 Searching for Python versions matching: Python 3.11 Searching for Python versions matching: Python 3.12 Installed 3 versions in 3.42s + cpython-3.10.14-macos-aarch64-none + cpython-3.11.9-macos-aarch64-none + cpython-3.12.4-macos-aarch64-none Pythonのインストール
  4. © 2024 Masafumi Abeta 5 $ uv init sample --package

    --python 3.12 プロジェクトの作成 sample ├── .git ├── .gitignore ├── .python-version ├── README.md ├── pyproject.toml └── src └── sample └── __init__.py [project] name = "sample" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [project.scripts] sample = "sample:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" pyproject.toml
  5. © 2024 Masafumi Abeta 6 $ cd sample $ uv

    venv 仮想環境の作成 sample ├── .git ├── .gitignore ├── .python-version ├── .venv ├── README.md ├── pyproject.toml └── src └── sample └── __init__.py
  6. © 2024 Masafumi Abeta 7 $ uv run example.py 3.12.6

    $ uv run --python 3.10 example.py 3.10.15 スクリプト実行 import sys print(".".join(map(str, sys.version_info[:3]))) example.py
  7. © 2024 Masafumi Abeta 8 $ uv add requests $

    uv remove requests # アンインストール $ uv add flake8 --dev # 開発用インストール パッケージのインストール sample ├── .git ├── .gitignore ├── .python-version ├── .venv ├── README.md ├── pyproject.toml ├── src │ └── sample │ └── __init__.py └── uv.lock [project] name = "sample" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ "requests>=2.32.3", ] [dependency-groups] dev = [ "flake8>=7.1.1", ] [project.scripts] sample = "sample:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" pyproject.toml
  8. © 2024 Masafumi Abeta 9 $ uv sync # pyproject.tomlの依存関係をインストール

    $ uv lock # uv.lockファイルを作成 パッケージのインストール2
  9. © 2024 Masafumi Abeta 10 $ uv tree Resolved 6

    packages in 1ms sample v0.1.0 └── requests v2.32.3 ├── certifi v2024.8.30 ├── charset-normalizer v3.4.0 ├── idna v3.10 └── urllib3 v2.2.3 依存関係の表示
  10. © 2024 Masafumi Abeta 11 $ uv pip install ruff

    Resolved 1 package in 43ms Installed 1 package in 1ms + ruff==0.7.1 ただしuvの管理から外れてしまう pip インターフェース(最後の手段) [project] name = "sample" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ "requests>=2.32.3", ] [project.scripts] sample = "sample:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" pyproject.toml Pyproject.toml にもuv.lockに も反映されない
  11. © 2024 Masafumi Abeta 12 右のように書き換えてからsyncコマンド $ uv sync PyTorchのインストール

    (--index-urlの追加) [project] name = "sample" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ "requests>=2.32.3", "torch==2.5.1+121" ] ~省略~ [tool.uv.source] torch = { index = "pytorch" } [[tool.uv.index]] name = "pytorch" url = "hrrps://dounload.pytorch.org/whl/cu121" explict = true pyproject.toml
  12. © 2024 Masafumi Abeta 13 $ uv venv $ source

    .venv/bin/activate $ uv sync $ uv run mim install mmengine $ uv run mim install "mmcv==2.1.0" $ git clone https://github.com/open-mmlab/mmdetection.git $ cd mmdetection $ uv pip install -v -e . $ uv run demo/image_demo.py demo/demo.jpg rtmdet-s (例)MMDetectionのインストール [project] name = “sample" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = "==3.10.12" dependencies = [ "wheel>=0.44.0", "numpy==1.26.4", "torch==2.1.2+cu121", "openmim", "setuptools>=75.3.0", "importlib-metadata>=8.5.0", "platformdirs>=4.3.6", ] [tool.uv.sources] torch = { index = "pytorch" } [[tool.uv.index]] name = "pytorch" url = "https://download.pytorch.org/whl/cu121" explicit = true pyproject.toml
  13. © 2024 Masafumi Abeta 14 その他できること • パッケージのビルド • CLIツールのインストール

    他にもあるので公式をチェック https://docs.astral.sh/uv/ 良いところ • Pythonのバージョン管理ができる • パッケージ管理ができる • パッケージの依存関係まで分かる • 動作がめっちゃ速い 不足に感じるところ • editableモード等、複雑なインストールに対応していない(機械学習PJではありがち) • インストール順があるものは対応できない(flash-attention) • 開発が活発なので仕様が大きく変わるかも(3日に一回パッチアップデート) まとめ