Zenn
Open4

poetry → uv への移行

hrsma2ihrsma2i

poetry → uv への移行

uv のインストール

brew install uv もある
https://docs.astral.sh/uv/getting-started/installation

pyproject.toml の書き換え、 poetry.lock → uv.lock

uvx migrate-to-uv

を実行すると pyproject.toml が書き換わり、 poetry.lock → uv.lock になる

https://github.com/mkniewallner/migrate-to-uv

事前に poetry 特有の記法である ^3.12.0 などは公式の ~=3.12.0 に書き換えておく。そうしないと migrate-to-uv が失敗する。

.venv の作成

# poetry install に相当
uv sync

を実行すると、プロジェクト直下に .vnev が作られ、依存関係がインストールされる。

hrsma2ihrsma2i

Dockerfile

# COPY 句で ARG 変数使えないため
ARG UV_VERSION=0.5.24
FROM ghcr.io/astral-sh/uv:${UV_VERSION} AS uv

# Base image
FROM python:3.12-slim

# https://docs.astral.sh/uv/guides/integration/docker/#installing-uv
COPY --from=uv /uv /uvx /bin/

WORKDIR /app
COPY pyproject.toml uv.lock /app/

# /app/.venv にライブラリがインストールされる
RUN uv sync

ENV PATH="/app/.venv/bin:$PATH"

https://docs.astral.sh/uv/guides/integration/docker/#installing-uv

↑では uv はベースイメージの Python 3.12 を参照する。 uv 自身、 pyenv のように Python をインストールできるが、 uv 以外(Mac 標準、brew、mise 等)ですでにインストールした Python があれば、uv はそれを参照する。

hrsma2ihrsma2i

poetry → uv に移行したプロジェクトをローカルで動かす

チーム管理の poetry のプロジェクトを、他メンバーが uv に移行したときに、自分のローカルマシンでは何をすればいいか。

uv をインストールする( brew install uv もある)。
https://docs.astral.sh/uv/getting-started/installation/

# poetry install に相当
uv sync

を実行すると、プロジェクト直下に .vnev が作られ、依存関係がインストールされる。

おわり

pyenv, pipx は不要になる

アンインストールしておk。

  • pyenv installuv python install
  • pyenv localuv python pin
  • pipx installuv tool install

brew, mise との共存

特に何もしなくてよい。 uv 以外(Mac 標準、brew、mise 等)ですでにインストールした Python があれば、uv はそれを参照するようになってるので。

$ uv python list

cpython-3.14.0a4+freethreaded-macos-aarch64-none    <download available>
cpython-3.14.0a4-macos-aarch64-none                 <download available>
cpython-3.13.1+freethreaded-macos-aarch64-none      <download available>
cpython-3.13.1-macos-aarch64-none                   /opt/homebrew/opt/python@3.13/bin/python3.13 -> ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.13.1-macos-aarch64-none                   <download available>
cpython-3.12.8-macos-aarch64-none                   /Users/user.name/.local/share/uv/python/cpython-3.12.8-macos-aarch64-none/bin/python3.12
cpython-3.11.11-macos-aarch64-none                  /opt/homebrew/opt/python@3.11/bin/python3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/python3.11
cpython-3.11.11-macos-aarch64-none                  <download available>
cpython-3.11.6-macos-aarch64-none                   /usr/local/bin/python3.11 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
cpython-3.11.6-macos-aarch64-none                   /usr/local/bin/python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3
cpython-3.10.16-macos-aarch64-none                  <download available>
cpython-3.9.21-macos-aarch64-none                   <download available>
cpython-3.9.6-macos-aarch64-none                    /Library/Developer/CommandLineTools/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>
hrsma2ihrsma2i

poetry との共存(普段は uv を使いつつ、 poetry 管理のプロジェクトを動かす)

# poetry のインストール
# pipx install poetry に相当
uv tools install poetry

# プロジェクトに必要なバージョンの Python をインストール
# pyenv install, pyenv local に相当
uv python install $PYTHON_VERSION
uv python pin $PYTHON_VERSION

# プロジェクト直下に .venv を作るといろいろ便利(VSCode で補完を効かせるのが簡単、等)
poetry config virtualenvs.in-project true

# .venv 下に依存関係をインストール
poetry install

# .venv が有効になっているか、
# uv でインストールした Python を使えてるか確認
poetry env info

uv は poetry, pyenv, pipx の代わりになるが、仮想環境構築の部分だけ poetry を使い、 pyenv, pipx に相当する部分は uv を使う。まとめると、

  • uv 管理のプロジェクト
    • pipx → uv tool
    • pyenv → uv python
    • poetry → uv
  • poetry 管理のプロジェクト
    • pipx → uv tool
    • pyenv → uv python
    • poetry → (uv tool 経由の) poetry
ログインするとコメントできます