Open4
poetry → uv への移行

poetry → uv への移行
uv のインストール
brew install uv
もある
pyproject.toml の書き換え、 poetry.lock → uv.lock
uvx migrate-to-uv
を実行すると pyproject.toml が書き換わり、 poetry.lock → uv.lock になる
事前に poetry 特有の記法である ^3.12.0
などは公式の ~=3.12.0
に書き換えておく。そうしないと migrate-to-uv が失敗する。
.venv の作成
# poetry install に相当
uv sync
を実行すると、プロジェクト直下に .vnev が作られ、依存関係がインストールされる。

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 /uv /uvx /bin/
WORKDIR /app
COPY pyproject.toml uv.lock /app/
# /app/.venv にライブラリがインストールされる
RUN uv sync
ENV PATH="/app/.venv/bin:$PATH"
↑では uv はベースイメージの Python 3.12 を参照する。 uv 自身、 pyenv のように Python をインストールできるが、 uv 以外(Mac 標準、brew、mise 等)ですでにインストールした Python があれば、uv はそれを参照する。

poetry → uv に移行したプロジェクトをローカルで動かす
チーム管理の poetry のプロジェクトを、他メンバーが uv に移行したときに、自分のローカルマシンでは何をすればいいか。
uv をインストールする( brew install uv
もある)。
# poetry install に相当
uv sync
を実行すると、プロジェクト直下に .vnev が作られ、依存関係がインストールされる。
おわり
pyenv, pipx は不要になる
アンインストールしておk。
-
pyenv install
→uv python install
-
pyenv local
→uv python pin
-
pipx install
→uv 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>

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
ログインするとコメントできます