mypyc:把 Python 编译成 C 扩展,性能提升 4 倍
mypyc:把 Python 编译成 C 扩展,性能提升 4 倍
mypyc 是一款将 Python 模块编译为 C 扩展的工具,目前已有近 2k Star:


mypyc 使用标准 Python 类型提示生成高性能的 C 代码。它借助 mypy 完成类型检查和类型推断,开发者只需编写带注解的普通 Python 代码,无需学习额外语法。
核心思路
mypyc 的出发点是让 Python 代码跑得更快,同时保持代码的可读性和可维护性。它接收带类型注解的 Python 源码,输出 C 扩展模块,运行时直接加载这些编译后的模块。
mypy 项目从 2019 年开始用 mypyc 编译自身,获得了 4 倍的性能提升。这个实际案例说明,mypyc 在大型代码库上能够产生明显效果。
主要特性
mypyc 支持标准库 typing 模块的大部分特性,包括泛型、可选类型、联合类型和元组类型。它的类型推断能力较强,大部分变量不需要手动注解。
编译后的代码仍然是有效的 Python,所有编辑器和 IDE 都能正常工作。第三方库和标准库在编译后的代码中也可以正常使用。
mypyc 在运行时严格执行类型注解,提供运行时类型安全保障。它采用预编译模式,程序启动速度较快。
与 Cython 的区别
mypyc 和 Cython 都能将 Python 编译为 C 扩展,但两者设计理念不同。
mypyc 不需要非标准语法,比如 cpdef 或额外装饰器。它对类型系统特性提供原生支持,包括元组类型、联合类型和泛型。mypyc 的类型推断能力来自 mypy,很多变量无需注解就能获得良好性能。
Cython 更偏向于为性能关键代码手写 C 级优化,而 mypyc 面向的是希望整体提升 Python 代码性能、又不想改动代码风格的开发者。
使用方式
mypyc 可以编译单个模块,也可以编译整个代码库。编译过程是可选的,未编译的代码作为普通 Python 运行,编译后的代码作为 C 扩展运行,两者行为一致。
安装 mypyc 后,通过命令行指定要编译的模块或包即可。编译产物是标准的 C 扩展,部署方式和普通 Python 包相同。
开发状态
mypyc 目前处于 alpha 阶段,适合愿意测试并反馈问题的早期用户。项目团队正在积极改进 Python 兼容性、编译速度和易用性。
代码托管在 mypy 仓库的 mypyc 子目录下,开发文档和 issue 跟踪器均已开放。新贡献者在开发、测试、文档和基准测试方面都可以参与。
如果你正在寻找一种不改变 Python 编程习惯、就能提升运行速度的方案,mypyc 值得尝试。
正在寻找一种不改变 Python 编程习惯、就能提升运行速度的方案,mypyc 值得尝试。
更多推荐

所有评论(0)