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 / pylint | Linter |
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替代了pip、pip-tools、pipx、poetry、pyenv、virtualenv和twine。全部。一个二进制文件。
我知道你在想什么:“好吧,又一个声称替代一切的工具。“但数据简直不可思议:
| 操作 | pip | uv | 速度提升 |
|---|---|---|---|
| 安装依赖(无缓存) | ~30s | ~0.3s | 100x |
| 解析依赖 | ~15s | ~0.15s | 100x |
| 创建virtualenv | ~2s | ~0.01s | 200x |
| 安装(有缓存) | ~5s | ~0.05s | 100x |
这不是合成基准测试。这是你在日常工作中能感受到的。原本让你有时间去倒咖啡的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 | ~60s | 1x |
| Pyright | ~6s | 10x |
| ty | ~1s | 60x |
在编辑PyTorch仓库的文件后,ty在4.7毫秒内重新计算诊断。Pyright需要386ms。Mypy…最好别问。
ty有交集类型、高级类型收窄和带有自动完成、内联提示和代码导航的语言服务器。这不是一个快速玩具:这是一个完整的类型检查器,而且速度飞快。
令人痛苦的对比表
让我们并排比较数据。你以前有的,你现在有的,以及快了多少:
| 类别 | 以前(Python) | 现在(Rust) | 速度提升 |
|---|---|---|---|
| 包+环境 | pip + virtualenv + pyenv + poetry | uv | 10-100x |
| Linter | Flake8 / Pylint | Ruff | 10-100x |
| 格式化工具 | Black + isort | Ruff | 10-100x |
| 类型检查器 | mypy / Pyright | ty | 10-60x |
| 隔离工具 | pipx | uv tool (uvx) | 10-100x |
五个类别。八个或更多异构工具被三个共享生态系统、配置和维护的工具取代。全部用Rust编写。全部来自Astral。
不只是Python:Ferris吃掉了终端
这不是Python的孤立现象。看看经典终端工具发生了什么:
| 经典工具 | Rust版本 | 主要改进 |
|---|---|---|
grep | ripgrep (rg) | 快2-5倍,遵守.gitignore |
find | fd | 人性化语法,忽略.gitignore |
cat | bat | 语法高亮,Git集成 |
ls | eza | 颜色,图标,Git信息 |
diff | delta | 语法高亮,并排显示 |
cd | zoxide | 学习你的常用路径 |
每个工具都遵循相同的模式:拿一个30年来在用户体验上没有改进的经典Unix工具,用Rust和现代默认设置(颜色、.gitignore、并行处理)重写它,结果如此优秀,人们一个下午就切换了。
讽刺的是:那些说"用Rust重写是个梗"的开发者们每天都在使用ripgrep、bat、fd和eza。不知不觉中,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。我认为这是个公平的交易。