🗂

pyenv+venv→uvへの乗り換え

に公開

群雄割拠 pythonパッケージ管理

poetryが流行ったと思ったらryeが現れ,その次はuv?
貴様らどんだけ浮気性なんじゃ!と思い,実験環境ではpyenv+venv,デプロイではdockerfilepip install ベタ書き,と言う構成を頑なに使い続けていたのですが,試しに使ってみたuvがfaster and simpler と感じたので乗り換えることにしました.以下最小限の置き換えです.その他の便利機能(というか正しい使い方)は色々あるみたいですが,僕には扱いきれそうもないので他記事を参照してください.

環境

ubuntu 20.04/22.04

インストール

curl -LsSf https://astral.sh/uv/install.sh | sh
uv -h

venv作成

今までpython -m venv {venv_name}とやっていたところは

uv venv {venv_name(optional)} --python {3.x.y(optional)}

となる.

立ち上げには同じようにsource .venv/bin/activateでOK.
vscodeのpython拡張でもちゃんとインタプリタとして認識してくれる.

pip install

今までpip install xxxとやっていたところは

uv pip install xxx
uv pip install -r requirements.txt

となる.

注意として,.venv内ではpythonコマンドはuv内のpythonが使われてくれるのだが,pipコマンドは外のpipが使われてしまう.
つまり,pipじゃなくてuv pipを使ってねということ.

uv add

以上述べた機能は,あくまでpyenv+venvのシンプルな互換であり,uvの真価を発揮できてはいない.uv pip installは,あくまでそのディレクトリの.venvにinstallされるだけであって,プロジェクトとしての再現性は取れなくなる.

そこで登場するのがuv addである.
今までpip install xxxとやっていたところを

uv init

uv add xxx
uv add -r requirements.txt

とすることで,pyproject.toml内にライブラリとバージョンが記載されるのだ(よりリッチなrequirements.txtと思えば良い)

このような正当な使い方については,公式ドキュメントを読んでいただきたい.

Discussion