uv 一把梭指南
最近心血来潮,尝试了一下 python 解释器版本和包管理工具标准化方案。使用的是 uv,理由是名字够短,并且有集百家之长的趋势。
概念
uv 的概念比较清晰,全局管理 python 解释器,每个版本的解释器都只安装一次,项目级管理依赖,在项目内会把解释器软链到全局的对应版本 python 解释器(.venv/bin/python
),把依赖维护到 .venv/lib
。
以往 Python 依赖默认安装到全局环境(site-packages),多个项目共享依赖,非常容易导致版本冲突,导致不得不新建一个虚拟环境(带解释器)。而 uv 实在是神清气爽,和其他语言的心智模型也都殊途同归: 全局管理工具链,项目级管理依赖。除了 python 有需要更频繁切版本的问题。
使用
对于新项目,直接用 uv init, uv add, uv sync
初始化和管理依赖就可以了。对于存量项目,我尝试了一下 migrate-to-uv
,这个工具可以把其他类型的包管理器迁移到 uv。用法很简单,在项目根目录执行 uvx migrate-to-uv
就可以。目前这个工具支持迁移 Poetry, Pipenv, pip-tools, pip,迁移之后 uv sync
就可以了。
切解释器版本也很简单,修改 .python-version
里的版本,然后 uv sync