TL;DR:Python工具多年来一直是支离破碎且缓慢的灾难。革命没有来自生态系统内部:它来自Rust。uv、Ruff和ty——都由Astral用Rust编写——已经取代了半打工具,速度提升了10倍到100倍。看来Ferris信徒们还是有道理的。


你有没有试过向别人解释如何在Python中安装依赖?

“用pip。不过,要在virtualenv里面。或者用venv,这是新的。如果你有多个Python版本,需要用pyenv。管理项目的话,用poetry。或者pipenv。或者pdm。如果做数据科学就用conda。啊,lock文件每个工具都用不同的格式生成。别忘了setup.py。嗯,现在是pyproject.toml了。不过,有时候两个都要。”

如果这听起来很熟悉,你并不孤单。Randall Munroe在2018年为此专门画了一期xkcd漫画——一个意大利面条图,展示了Python在你机器上可能的所有安装方式。八年过去了,这期漫画依然贴切。或者说,直到最近还是这样。

工具墓地

让我们盘点一下。在2024年之前,要搭建一个"现代"Python项目,你至少需要从这些工具中组合选择:

工具功能
pip安装包
virtualenv / venv隔离环境
pyenv管理Python版本
poetry / pipenv / pdm依赖管理和lock文件
flake8 / pylintLinter
black / autopep8格式化工具
isort排序导入
mypy / pyright类型检查

至少八个工具——而在其他生态系统中这只需要一两个工具。每个都有自己的配置、配置文件,以及与其他工具的不兼容性。在pyenv创建的virtualenv中安装poetry,而pyenv又使用Homebrew安装的Python,而Homebrew又有另一个全局pip…好吧,你懂的。

最糟糕的是:每隔几年就会出现一个新工具,承诺统一一切。Pipenv曾经要成为解决方案。然后是poetry。然后是pdm。xkcd的标准化漫画在循环上演:“我们有14个工具,这太荒谬了。我要创建一个统一工具。现在我们有15个工具了。”

然后螃蟹来了

2022年,一个叫Charlie Marsh的人——Khan Academy和Spring Discovery的前员工——发布了一个叫Ruff的Python linter。用Rust编写。

Python社区的反应可想而知:“太好了,又一个linter。“直到他们看到数据。Ruff比Flake8快10到100倍。不是快20%。不是快一倍。**快一百倍。**在大型代码库中,原本需要30秒的linting现在只需要300毫秒。

但Ruff不满足于只做一个快速linter。它吞并了Flake8、Pylint、isort和Black。一个工具,一个二进制文件,零Python依赖。它做linting、格式化、排序导入。而且速度如此之快,你可以在编辑器的每次按键时运行它而不会感觉到延迟。

Charlie创立了Astral来为项目提供架构。他招募了有趣的人才:团队中有ripgrep、bat和hyperfine的作者——这些用Rust编写的终端工具已经证明了用Rust重写经典工具不是在开玩笑,而是客观的改进。

uv:让pip看起来像拨号上网

2024年2月,Astral投下重磅炸弹:uv。一个Python包和项目管理器。用Rust编写。

简单说:uv替代了pippip-toolspipxpoetrypyenvvirtualenvtwine。全部。一个二进制文件。

我知道你在想什么:“好吧,又一个声称替代一切的工具。“但数据简直不可思议:

操作pipuv速度提升
安装依赖(无缓存)~30s~0.3s100x
解析依赖~15s~0.15s100x
创建virtualenv~2s~0.01s200x
安装(有缓存)~5s~0.05s100x

这不是合成基准测试。这是你在日常工作中能感受到的。原本让你有时间去倒咖啡的pip install现在在你按下回车之前就完成了。

uv不仅快速。它有可重现的lock文件、跨平台依赖解析、集成的Python版本管理(uv python install 3.12就完成了),以及隔离的脚本和工具执行(uvx ruff check .)。以前需要五个工具才能做的事,uv一个命令就搞定。

ty:最后一颗钉子

好像uv和Ruff还不够,2025年12月Astral发布了ty的测试版:一个Python类型检查器。用Rust编写。

数据又一次令人震惊:

工具大型代码库时间相比mypy的速度提升
mypy~60s1x
Pyright~6s10x
ty~1s60x

在编辑PyTorch仓库的文件后,ty在4.7毫秒内重新计算诊断。Pyright需要386ms。Mypy…最好别问。

ty有交集类型、高级类型收窄和带有自动完成、内联提示和代码导航的语言服务器。这不是一个快速玩具:这是一个完整的类型检查器,而且速度飞快。

令人痛苦的对比表

让我们并排比较数据。你以前有的,你现在有的,以及快了多少:

类别以前(Python)现在(Rust)速度提升
包+环境pip + virtualenv + pyenv + poetryuv10-100x
LinterFlake8 / PylintRuff10-100x
格式化工具Black + isortRuff10-100x
类型检查器mypy / Pyrightty10-60x
隔离工具pipxuv tool (uvx)10-100x

五个类别。八个或更多异构工具被三个共享生态系统、配置和维护的工具取代。全部用Rust编写。全部来自Astral。

不只是Python:Ferris吃掉了终端

这不是Python的孤立现象。看看经典终端工具发生了什么:

经典工具Rust版本主要改进
grepripgrep (rg)快2-5倍,遵守.gitignore
findfd人性化语法,忽略.gitignore
catbat语法高亮,Git集成
lseza颜色,图标,Git信息
diffdelta语法高亮,并排显示
cdzoxide学习你的常用路径

每个工具都遵循相同的模式:拿一个30年来在用户体验上没有改进的经典Unix工具,用Rust和现代默认设置(颜色、.gitignore、并行处理)重写它,结果如此优秀,人们一个下午就切换了。

讽刺的是:那些说"用Rust重写是个梗"的开发者们每天都在使用ripgrepbatfdeza。不知不觉中,Ferris信徒们转化了他们。

分发二进制文件:真正的考验

然后是分发。这里Python和Rust的差异从"显著"变成了"巨大”。

在Python中,要向没有安装Python的人分发CLI,你需要:setup.py + setup.cfg + pyproject.toml(哪个?三个都要,以防万一),twine上传到PyPI并祈祷认证不会失败,PyInstaller或Nuitka或cx_Freeze来制作二进制文件(但不工作),没人理解的200行CI工作流,每个Python版本的manylinux wheels,最后用户执行pip install却失败了,因为他们有Python 3.9而你编译的是3.12。

在Rust中,这是我用lql(我刚构建的CLI)做的:

git tag v1.0.2 && git push origin v1.0.2

一个命令。五分钟后:为macOS(Apple Silicon + Intel)、Linux(x86 + ARM + musl静态)和Windows编译了6个二进制文件。自动生成安装程序:Mac/Linux的curl | sh、Windows的PowerShell、IT部门的MSI,以及发布在其tap中的Homebrew配方。全部,从一个Git标签开始。

二进制文件4.7MB。无运行时。无依赖。复制过去就能用。试试用Python做这个而不得溃疡。

锦上添花:学生超越老师

这里是真正让我震惊的地方。

过去十年中发生在Python身上的最好的工具——uv、Ruff、ty——不是用Python写的。它们用Rust写的。那个被Python开发者们俯视的语言(“太复杂了”、“那是给嵌入式系统用的”、“借用检查器是地狱”)结果是解决了Python自己无法解决的问题的语言。

为什么?因为这些工具的瓶颈不是逻辑——是纯粹的性能。解析有数千个包的依赖图,解析数百万行代码寻找错误,在十万行代码库中检查类型。这些是暴力问题,每毫秒都很重要,解释型语言和带有零成本抽象的编译语言之间的差异很明显。

Python很适合编写软件。但构建、分析和维护该软件的工具需要Python无法提供的速度。而Rust,凭借其内存安全、类型系统和性能,证明是完美的补充。

就像你的车很棒,但车库的机械师用塑料工具一样。有一天有人给了他们不锈钢工具,结果发现车开得一样好,但车库的效率提高了十倍。

剧情反转:OpenAI入场

如果你认为故事不能更有趣:3月19日,2026年——一周前——OpenAI宣布收购Astral。uv、Ruff和ty背后的公司成为Codex团队的一部分。

Astral承诺保持工具开源。但这一举动说明了很多:OpenAI收购Astral不是因为linter。而是因为一个知道如何用Rust构建极快开发工具的团队。他们想要这些来让AI代理更好地编写和管理代码。

融合很明显。人类用来开发Python的工具(uv、Ruff、ty)和AI代理用来编写代码的工具(Codex)将共享DNA。而那个DNA是用Rust编写的。

我周一该做什么?

如果你还没用uv,迁移很简单:

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

# 迁移现有项目
cd 我的项目
uv init                     # 如果不存在则创建pyproject.toml
uv add requests flask       # 添加依赖
uv sync                     # 在.venv中安装所有内容
uv run python app.py        # 在环境中运行

如果你使用Flake8、Black或isort,用Ruff替换它们:

uv tool install ruff
ruff check .               # linter
ruff format .              # 格式化工具

如果你够勇敢,试试ty进行类型检查:

uv tool install ty
ty check .

三个命令。三个工具。告别八个不同配置的噩梦。

最终,信徒们是对的

我听"你应该用Rust重写"好几年了,就像听雨声一样。RIIR(Rewrite It In Rust)这个梗似乎是穿螃蟹T恤的福音传道者教派的咒语。我想,继续鼓吹吧,他们终会厌倦的。

他们没有厌倦。而且事实证明他们有道理。

不是所有东西都应该用Rust重写。但开发工具——linter、类型检查器、包管理器、终端工具——正是Rust闪耀的软件类型:关键性能、频繁执行、零容错。结果不言自明。

Python仍然是我编写软件的语言。但我用来编写该软件的工具,越来越多地是用Rust编写的。它们比Python在二十年里为自己构建的任何东西都要好。

Ferris螃蟹为借用检查器向你道歉。但作为交换,它给你一个只需300毫秒且有效的pip install。我认为这是个公平的交易。