十年来Python生态最好工具,引爆全社区的uv到底是什么?

资讯 » 新科技 2025-10-30



机器之心报道

编辑:Panda

uv,我们也该报道一下它了。

这个用 Rust 写的 Python 包和项目管理工具近日在 Hacker News 上再次引发广泛关注。原因很简单,来自英国的天文学家和科学传播者 Emily L. Hunt 博士在自己的博客上发布了一篇文章,称「uv 是近十年来 Python 生态系统发生的最好的事情」。

博客不长,但被分享到 Hacker News 后却引发了广泛共鸣和讨论,也收获了上千点赞(虽然很多讨论的焦点是 Rust)。





不过在看这篇博客之前,我们先简单了解一下 uv 这个项目本身。

简单来说,uv 是一个面向 Python 生态系统的高速「一体化」工具,可用于包管理、环境管理、项目初始化、工具执行、Python 版本管理等。其由 Astral(同样推出了知名工具 Ruff)开发,底层使用 Rust 语言实现,以追求极致性能。对于已有的工作流、pip、virtualenv、pipx、poetry 等工具,uv 提供极强的兼容性并且在某些场景下速度可提升 10–100 倍。



截至目前,该项目在 GitHub 已经收获了超 7.1 万 star!



项目:https://github.com/astral-sh/uv文档:https://docs.astral.sh/uv/

以下是 uv 的一些关键特性:

一款工具即可取代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等众多工具。⚡️ 比 pip 快 10 到 100 倍。️ 提供完善的项目管理功能,并支持通用锁定文件(lockfile)。❇️ 可直接运行脚本,并支持内联依赖元数据。支持安装和管理多个 Python 版本。️ 可运行或安装以 Python 包形式发布的命令行工具。内置兼容 pip 的接口,在保持熟悉命令行体验的同时大幅提升性能。支持类似 Cargo 的工作区结构,轻松管理大型项目。磁盘占用高效,依赖可通过全局缓存实现去重。⏬ 无需预装 Rust 或 Python,即可通过 curl 或 pip 安装。️ 兼容 macOS、Linux 和 Windows 系统。

接下来,我们就来看看为什么说「uv 是近十年来 Python 生态系统发生的最好的事情」。



博客标题:uv is the best thing to happen to the Python ecosystem in a decade博客地址:https://emily.space/posts/251023-uv

都 2025 年了。难道安装 Python、管理虚拟环境、在同事间同步依赖,还非得那么费劲吗?

嗯... 真的不用!

最近,一款名为 uv 的杰出新工具横空出世。它彻底革新了 Python 的安装和使用方式,让一切变得无比简单。

uv 是一款免费的开源工具。它由 Astral 打造,这是一家小型创业公司,过去几年一直在持续产出优秀的 Python 工具(比如大名鼎鼎的 linter Ruff)。uv 能做到:

为你安装任意 Python 版本安装软件包管理虚拟环境极速解决依赖冲突(这对大型项目至关重要)

最棒的是,在我看来,uv 在上述所有方面都比其他任何工具做得更好。

它的速度快得惊人。它由 Rust 语言编写,并且几乎兼容所有操作系统或平台。

安装 uv

uv 的安装非常简单。有几种方法,但我认为最简单的是这个单行命令。

对于 Linux 和 Mac 用户:

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

或者,Windows 用户在 PowerShell 中使用:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

之后,你就可以通过 uv 命令来使用它了。

安装 uv 不会搞乱你现有的任何 Python 环境。它是一个完全独立的工具,所以你可以放心地安装并试用。

管理项目的 Python

无论开发什么 Python 项目,使用虚拟环境都是一个好习惯。

虚拟环境能将不同项目的代码和依赖相互隔离开。以我的经验来看,尽早养成这个习惯能省去未来很多麻烦。

uv 天生就会使用虚拟环境。因此,一旦你开始用 uv,上手虚拟环境也会变得非常容易。

uv 会根据你当前目录(或父目录)中 pyproject.toml 文件的配置来构建 Python 环境。

pyproject.toml 文件是指定 Python 项目依赖的标准、现代格式。一个最精简的 pyproject.toml 文件可能如下所示:

[project]

name = "my_project"

version = "1.0.0"

requires-python = ">=3.9,<3.13"

dependencies = [

"astropy>=5.0.0",

"pandas>=1.0.0,<2.0",

简而言之,它只需要指定使用哪个 Python 版本和一些依赖项。当然,加上项目名称和版本号也是个好主意。

(补充一点:如果你的项目需要作为软件包发布(例如发布到 pip 和 uv 用的 Python 软件包索引 PyPI),pyproject.toml 文件是指定发布所需全部信息的现代方式。)

用 uv 创建新项目

要用 uv 启动一个新 Python 项目,你可以运行:

uv init

这个命令会为你创建一个新项目,包含 pyproject.toml、README.md 和其他重要的模板文件。

这个命令还有很多变种,比如 uv init --bare(只创建 pyproject.toml)和 uv init --package(设置一个新的 Python 包)等等。

我建议你运行 uv init --help 来查看所有选项。

当你(已经)有了 pyproject.toml 文件

一旦你初始化了项目,或者项目里已经有了 pyproject.toml 文件,使用 uv 就变得非常简单。

你只需要在 pyproject.toml 文件所在的目录中运行:

uv sync



这个命令(实际上,如果你还没运行过,大多数 uv 命令都会)会执行以下操作:

自动安装一个有效的 Python 版本。在目录下的 .venv 文件夹中安装所有依赖,创建一个新虚拟环境。在你的目录中创建一个 uv.lock 文件。该文件会保存每个已安装包的确切、平台无关的版本。这意味着你的同事可以完全复刻你的 Python 环境。

原则上,你可以像激活其他工具创建的虚拟环境那样「激活」这个新环境。

但最「uv 风格」的使用方式,是直接在任何命令前加上 uv run。uv run 会自动为你匹配正确的虚拟环境,并用它来执行你的命令。

例如,要运行一个脚本,你不再需要:

source .venv/bin/activate

python myscript.py

你只需:

uv run myscript.py

这样做的效果是完全一样的。

同理,要使用像 Jupyter Lab 这样的「工具」,你也不需要先「激活」环境再单独运行 jupyter lab。你只需在项目目录中运行:

uv run jupyter lab

添加依赖

你当然可以直接手动编辑 pyproject.toml 文件。uv 会检测到变更并重新构建你项目的虚拟环境。

但 uv 也提供了更简单的方式来添加依赖。你只需运行:

uv add numpy>=2.0

这样就可以添加一个包,并(像上面那样)指定版本限制。

这个命令会自动为你修改 pyproject.toml 文件。uv add 功能也非常强大,支持从 git 或你电脑上的其他位置添加远程依赖(但这里我就不展开了)。

锁定 Python 版本

最后,我认为 uv 最有用的功能之一,是为你的项目锁定一个特定的 Python 版本。

运行这个命令:

uv python pin 3.12.9

这条命令会为你(以及其他任何使用 uv 的人)将当前项目精确锁定到 Python 3.12.9 版本。

这意味着你真的可以在多台机器间复制完全一致的 Python 安装环境。

uvx:跳过以上所有步骤,立即运行工具!

但有时候,你可能只想快速运行一个工具。

比如,临时用 Ruff 检查下代码,或者在没有环境时启动一个 Jupyter notebook 服务器,甚至只是想快速启动一个装了 pandas 的 IPython 会话来打开某个文件。

uv tool 命令(它的缩写别名是 uvx)让这一切变得异常简单。

运行像下面这样的命令:

uvx ruff

uv 会自动下载你需要的工具,并在一个一次性虚拟环境中运行它。

一旦这个工具被下载过,uv 就会利用缓存,下次再运行就会快如闪电。

我有很多场合会用到这个功能。一个常见的场景是,快速启动一个安装了 pandas 的 IPython 会话(使用 --with 添加依赖),这样我就可以快速打开并查看一个 parquet 文件。例如:

uvx --with pandas,pyarrow ipython

或者,也许只是想启动一个 Jupyter Lab 服务器,好让我能快速打开学生发来的 Jupyter notebook:

uvx jupyter lab

老实说,还有太多其他奇怪的、一次性的用例,uvx 都能派上用场。

我丝毫不会(因为总用虚拟环境)而感到不便,因为 uvx 总能在我需要时提供一张「万能通行证」。

如果这还不能说服你:一些个人感想

我是在去年第一次发现 uv 的。

当时,我正和我们其他可爱的开发者们一起构建 The Astrosky Ecosystem。这是一个很棒的项目,旨在为天文学家们构建开源的在线社交媒体集成。

但我们有多个开发者,大家在不同的操作系统上异步工作。很快,管理 Python 安装就成了一项艰巨的任务。

对我们而言,uv 是一个极其强大的简化工具,我们已在整个技术栈中全面使用它。

作为开发者,我们现在终于能使用完全一致的 Python 安装环境了。这一点尤其重要,因为我们用的一些半实验性依赖,每个版本都有破坏性改动。

在 GitHub Actions,我们正计划使用 uv 来快速构建 Python 环境并运行单元测试。

在生产环境中,uv 已经管理着我们所有服务器的 Python。

能够确信,我们所有机器上的 Python 和软件包安装总能得到一致且正确的处理,这种感觉真是太棒了。

这就是为什么我说,uv 是近十年来 Python 生态系统发生的最好的事情。



你已经用上 uv 了吗?对此有什么看法?



免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其内容真实性、完整性不作任何保证或承诺。由用户投稿,经过编辑审核收录,不代表头部财经观点和立场。
证券投资市场有风险,投资需谨慎!请勿添加文章的手机号码、公众号等信息,谨防上当受骗!如若本网有任何内容侵犯您的权益,请及时联系我们。