uv——Python开发栈中的高效全能小工具
发布时间:2025-06-26 08:18 浏览量:1
每天写Python代码的同学,肯定都离不开pip、virtualenv、Poetry等基础工具,但是对这些工具可能是又恨又离不开。那么有什么好的替代呢,虫虫今天就给大家介绍一个替代他们的小工具uv,一个Rust写的全能高性能工具,有了它前面那些都可以扔到垃圾箱去了。
Pip是Python语言内置的包管理系统,用于安装和管理软件包。Pip是Python最常用的包管理系统,他大而臃肿,而且超级慢,时常还会遇到慢地卡住的情形。Pip的版本管理也有问题,如果依赖项配置文件编写的有问题或者是维护不及时,则会引发严重的依赖问题,并对项目维护产生负面影响。而且Pip还不能做到准确适配Python代码,导致在恢复运行时环境时成功率较低。
uv是“pip,但速度超快™️,是一个用Rust语言重写的一个Python堡管理器,实现用来为pip和pip-tools用于包管理。uv支持现代Python打包工具的所有功能:可编辑安装、Git依赖项、URL依赖项、本地依赖项、约束文件、源代码分发、自定义索引等等,所有这些都围绕与现有工具的直接兼容性而设计。uv的虚拟环境符合标准,可与其他工具互换使用——无需锁定或定制。
uv还支持跨平台使用,Linux、Windows和macOS通吃。
uv的初始版本是一个兼容的API,主要支持pip和pip-tools背后的API uv pip接口,使其能够供现有项目零配置使用。uv身兼数职统一为一个整体,可以支持PIP、virtualenv、Conda、Poetry具有的所有功能,同时支持模块化,可以单独作为部分工具使用:
作为解析器,锁定依赖项:uv pip compile
环境虚拟管理:uv venv
包安装程序:uv pip sync
高性能:无需缓存,使用热缓存运行时(例如,重新创建虚拟环境或更新依赖项)速度提高80-115倍。uv 使用全局模块缓存来避免重新下载和重新构建依赖项,并利用支持的文件系统上的写时复制和硬链接来最大限度地减少磁盘空间使用。
基准测试显示:
简化的工具链:uv以单个静态二进制文件的形式发布,可以替换pip,pip-tools, 和virtualenv.uv,没有直接的Python依赖,可以将它与Python本身分开安装,从而避免管理pip跨多个Python版本安装。
依赖项:uv支持多解析策略。默认情况下,uv遵循标准Python依赖项解析策略,优先选择每个包的最新兼容版本。
--resolution=lowest针对其依赖项的最低兼容版本测试他们的包。uv允许针对任意目标Python版本进行解析。
--python-version参数,使即使在较新版本下运行时也能生成与Python 3.7兼容的。
通过-o overrides.txt允许依赖项“覆盖”。
Uv既然是个静态文件工具,其安装非常简单,一般来说只需下载对应os的二进制包即可。也可以通过OS堡管理其或者脚本或者PyPI安装:
安装
# macOS 和Linux.
curl -LsSf astral.sh/uv/install.sh | sh虚拟环境:
安装成功后首先来创建一个虚拟环境:
uv venv激活它:
source .venv/bin/activate# Windows下使用.venv\Scripts\activate项目管理:
uv管理项目依赖项和环境,支持锁文件、工作区等, 类似于rye或者poetry:
uv init chongchongInitialized project `chongchong` at `/home/lz/chongchong`增加一个flask的项目
uv add flask安装工具:
使用uv tool run,缩写别名uvx,先来是个好玩的:、
uvx pycowsay 'hello Chongchong!'安装包
uv pip install flask安装requirements.txt指定的依赖项
uv pip install -r requirements.txt从硬盘安装当前项目
uv pip install "package @ ."管理依赖项:
要生成一组依赖项:
uv pip compile requirements.in -o requirements.txtuv pip compile pyproject.toml -o requirements.txtuv pip compile setup.py -o requirements.txtecho flask | uv pip compile - -o requirements.txtuv pip freeze | uv pip compile - -o requirements.txt依赖项与虚拟环境同步:
uv pip sync requirements.txtPython多版本管理
uv可以同时安装多个版本的python,比如
uv python install 3.11 3.12列出系统中安装的python版本
uv python list --only-installed通过特定python版本运行:
uv run --python pypy@3.11 -python要切换项目的python版本
uv python pin 3.11也可以通过项目的 pyproject.toml文件。例如,以下文件需要Python版本3.11以上版本:
...requires-python = ">=3.11"然后通过uv sync更新一下。
迁移:从PIP和Virtualenv切换到UV
上面介绍了uv的好处和基本功能使用,意识到uv的好处和了解其基本功能后是时候把手头项目切换到uv管理来了。实际上从PIP和Virtualenv迁移到UV非常简单,uv可以兼容现有Python打包标准。以下是我们介绍基本迁移步骤:
转换现有的虚拟环境项目
对现有项目使用,如果没有requirements.txt,先生成一个:
pip freeze > requirements.txt然后,在同一目录中创建一个新的uv项目:
uv init .最后,从通过依赖文件中安装依赖项:
pip/virtualenv 命令uv替代项目python -m venv .venvuv venvpip install packageuv add packagepip install -r requirements.txtuv pip install -r requirements.txtpip uninstall packageuv remove packagepip freezeuv pip freezepip listuv pip list这样就搞定了,现在就可以安全地删除旧的虚拟环境目录,并开始使用uv的虚拟环境管理。迁移过程通常是无缝的,可以随时回退到pip。
别名
在某些工作流程中,uv命令有点多,输入项目有点繁琐,可以设置一些别名来简化这项工作。
别名uvccinit创建虚拟环境,并激活之:
alias uvccinit='uv venv && source .venv/bin/activate'uvccsync处理依赖项,当依赖项有变更时候更新:
alias uvccsync='uv pip compile requirements.in --quiet --output-file requirements.txt && uv pip sync requirements.txt'uv多快能打,是个python环境管理、包管理、项目管理和依赖管理等的全能瑞士军刀。只一个静态二进制包,可以提供提安全、现代、高性能、高集成且高效的传统工具(链)替代方案。uv提供的强大功能,可以显著提高python开发管理,对于大量依赖Python生态的开发人员,还是某个只需安装一个Python包尝尝鲜的小白同学,都是很好的选择。
当然uv作为一个先进现代的工具,也有些地方是和老前辈有些许差异的,需要额外注意:
虽然uv支持pip接口的大部分子集,但它并不支持全部功能集。它缺乏对一些传统功能的支持,比如.egg分布。另外uv生成的requirements.txt中是指定了特定于平台,这和poetry和pdm会生成平台无关的poetry.lock和pdm.lock不同。因此,uv的requirements.txt文件不支持跨平台和Python版本移植。