📌 项目地址facebook/pyrefly | ⭐ 6,174 颗星 | 🔧 Rust | 📜 未标注

一件事说明白它做了什么

Pyrefly 是 Facebook(现 Meta)开源的 Python 类型检查器 + LSP 语言服务器。底层用 Rust 实现,速度和准确性都压过了 Mypy 和 Pyright。官方数据:单机每秒处理 185 万行代码,检查 PyTorch 比 Mypy 和 Pyright 快 15 倍。在编辑器里,保存文件后重检通常在 10 毫秒内完成。

我打开官方沙盒(https://pyrefly.org/sandbox/)敲了几行代码,类型错误几乎是跟着敲击一起出现的,没有肉眼可见的延迟。CLI 模式跟编辑器 LSP 模式的结果完全一致 —— 这意味着你不会遇到“CI 里不报错,编辑器里报错”的割裂情况。

核心优势:不妥协的速度

Pyrefly 快的秘密不只是 Rust 语言,还有它对类型推断路径的优化。它没有砍掉属性推断、泛型、重载这些特性来换速度,而是通过更聪明的调度和增量检查来减少重复计算。官方给的基准测试是 PyTorch 的代码库 —— 这是真实的大型项目,不是玩具 demo。Instagram 那套 2000 万行的 Python 代码已经默认用 Pyrefly 做类型检查,说明它在极端规模下是稳定的。

编辑体验:不只是“快”,而且“准”

装了 VS Code 扩展(meta.pyrefly)后,你能得到这些功能:

  • 跳转到定义、查找引用 —— 比 Mypy 的 stub 导航准得多,因为 Pyrefly 理解运行时类型。
  • 自动补全 —— 我在沙盒里试了 request.GET.get('key'),它知道返回值是 str | None
  • 悬停信息 —— 鼠标放变量上就显示类型和文档。
  • 语义高亮 —— 局部变量、函数参数、类型别名颜色不同,不用装额外的主题插件。
  • 内联类型提示(inlay hints)—— 代码里自动显示参数类型,省得你写注解。

Neovim 和 Zed 也有官方支持,其他编辑器去 https://pyrefly.org/en/docs/IDE/ 看具体步骤。

框架支持:Pydantic 和 Django 免配置

多数类型检查器解析 Pydantic 或 Django 时,需要手动装 types-pydanticdjango-stubs 等 stub 包,而且经常解析不完备。Pyrefly 直接把这两个框架的模型写进了内核。比如你写:

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

user = User(name="Alice", age=30)
print(user.name)

Pyrefly 不需要任何额外包就能知道 user.namestruser.ageint,并且 User(name="Alice") 缺少 age 时会报错。Django 的 QuerySet 链式调用、ForeignKey 关系也能正确推断。这对于重度用这些框架的项目来说,能省掉大量配置 stub 的时间。

迁移三步走:Mypy/Pyright 用户的救星

Meta 自己的代码库从 Mypy 切换到 Pyrefly 的过程中,沉淀出了三个命令,都在文档里写明白了:

  1. pyrefly init —— 自动扫描项目中的 mypy.inipyproject.toml(Pyright 配置)并生成 Pyrefly 的配置文件(pyproject.tomlpyrefly.toml)。你不需要手写任何配置。

  2. pyrefly suppress —— Pyrefly 每个月发新版本,可能会因为类型检查更严格而报出新错误。运行这个命令会把当前所有类型错误写到一个忽略列表里,让 CI 保持绿色,你之后再慢慢修。升级时先用 suppress 过渡,不会阻塞开发。

  3. pyrefly infer —— 对没有类型注解的代码自动推断并添加注解。可以只对核心模块运行,逐步扩大范围。

组合用法:先对单个文件启用 Pyrefly → 跑 suppress 把现有错误藏起来 → 用 infer 补上注解 → 之前静默的错误逐渐变少。不需要一天改完所有文件。

版本策略:打破语义化的务实选择

Pyrefly 每个月发一个 minor 版本(1.x.0),紧急修复走 patch。它明确说不遵循严格语义版本控制:minor 版本可能引入更严格的类型检查,导致之前不报错的代码突然报错。但提供了 suppress 命令兜底,让用户自己控制升级风险。这种节奏适合快速迭代,也适合大公司内部统一版本。

适合谁用

  • 项目几千行以上,Mypy 检查要等几十秒甚至几分钟 —— Pyrefly 的优势最明显。
  • 重度用 Pydantic 或 Django,希望 IDE 自动补全和类型推导能工作,不用额外装 stub 包。
  • 正在从 Mypy/Pyright 迁移,需要渐进式方案,不想一次性改完所有文件。
  • 小项目(几百行)也值得一试,但速度差距不那么明显。Pyrefly 的沙盒和 pip 安装都很简单,花 5 分钟试试不亏。

上手最快的方式

  1. 打开沙盒:https://pyrefly.org/sandbox/,零安装,直接写代码看类型检查效果
  2. 本地安装:pip install pyrefly,然后用 pyrefly check your_file.py
  3. 装编辑器扩展:VS Code 搜 meta.pyrefly;或去 https://pyrefly.org/en/docs/IDE/ 选你的编辑器,每个都有截图和配置步骤。
  4. 有问题去 Discord(https://discord.gg/Cf7mFQtW7W),Meta 团队的人在里面活跃回复。

Pyrefly 的 license 是 MIT,可以放心商用。

(注意:README 里没有给出具体星星数以外的其他 stars 数据,当前 6174 个 stars 是 GitHub 上的实时数据。)

这篇文章对你有帮助吗?

发表回复