淺嚐 uv
先從部落格開始

Category Tech

隨著快速又強大的 linter ruff 被大量採用
志在取代 pip (?)的 uv 也隨之問世
大專案如 Apache Airflow® 也採用了這個工具

剛釋出的時候並不如現在有強大的功能
先支援了 pip 跟 pip-compile 的基本功能
並不符合我希望能取代 pipenvpoetry 的需求
大概一兩個月前又有一個很大的更新,似乎是可以取代 poetry
但我還是想單純的用它來管 app 啊

然而前段時間刷推特看到 PyCon JP 朋友寫了 さらなる進化を遂げた「uv」の新機能
裡面有提到

uv init --app

我才發現,原來 uv 已經可以拿來管理 app 的相依套件了嗎!
那我還不趕快來試試
順便來試試前幾天在Python Bytes Episode 405 聽到的 setup-uv

於是就發了Replace pipenv with uv #38dependency: replace pipenv with uv #11兩個更新部落格套件管理工具的 PRs

目標有兩個

  1. pipenv 換成 uv
  2. 把 setup-python 換成 setup-uv

意外的還蠻順利的,幾乎沒有遇到什麼困難
首先要先把相依套件從 PipfilePipfile.lock 移到 pyproject.tomluv.lock

但因為專案中已經有 pyproject.toml,我先把原本檔案名改掉
透過以下指令產生 uv 管理 app 相依套件用的欄位到 pyproject.toml

uv init --app

再手動進行合併
也可以看 uv 如何初始化在 pyproject.toml 的 section
但是我懶,交給 uv init 處理就好

再來要把 Pipfile 中的套件加入 uv

uv add [dep1] [dep2] ...

要加入開發用套件,則是要加上 --dev 的 flag

uv add [dev-dep-1] [dev-dep-2] ... --dev

建立虛擬環境的部分,我則是使用 uv sync 來取代

pipenv uv
prod pipenv install uv sync --no-dev
dev pipenv install --dev uv sync

最後就剩下匯出 requirements.txt 給 pip-audit 來檢查的指令需要改成

uv pip compile pyproject.toml -o requirements.txt

剩下都是只要把 pipenv 改成 uv
setup-python 改成 setup-uv 也是相當的直覺

雖然原本相依套件本來就不多不會安裝太久
但現在 uv 實在快到「你真的有裝嗎,不要騙我沒讀書耶」的程度 😆