mypy 0.700 发布,显著提升性能,比旧版本快 4 倍

  

mypy 是处于实验性阶段的 Python 静态类型检查器,旨在结合动态类型和静态类型的优点,将 Python 的表现力和便利性与强大的类型系统和编译时(compile-time)类型检查相结合,提供编译时的类型检查和高效地编译为原生代码,无需使用重量级和耗费 runtime 开销的 Python 虚拟机。

mypy 仍处于开发阶段,支持大多数 Python 特性。

最新版的 mypy 0.700 已于两周前发布,更新内容集中在优化性能方面。官方表示相对于旧版本,mypy 0.700 速度快了 4 倍以上。除此之外,还包括引入新功能、错误修复和 library stub (typeshed) 更新,使用以下命令进行升级:

python3 -m pip install -U mypy

性能改进

从该版本起,默认使用由 mypyc 编译得到的 mypy 二进制文件,比之前发布的解释版本快 4 倍。编译版本也已经作为单独的 PyPI 发行版提供有一段时间了,而且这也是默认安装的第一个版本。

mypyc 是一个编译器,它将类型注释的 Python 模块编译成高效的 CPython C 扩展模块。

值得注意的是,对于旧版本可选的 mypy_mypyc 包将不会再进行更新。如果曾使用 mypy_mypyc 包来进行发布,则应在更新到新软件包之前先将其卸载:

python3 -m pip uninstall mypy_mypyc

64 位的 macOS, Windows 和 Linux 平台支持编译版本(要求 Python 3.5 或更高版本)。至于其他平台则依旧是使用解释版本,但不提供任何性能改进。编译版本与大多数解释版本兼容,但某些 mypy 插件可能与它不兼容。可以通过这样的方式来安装 0.700 的解释版本:

$ python3 -m pip install --no-binary mypy -U mypy

更严格的相等性检验

如果加上参数 --strict-equality 运行 mypy,它会直接检查相等性,而最后结果有可能总是 True 或 False,因为操作类型不会重叠。

Python 3.4 不支持运行 mypy

不能再使用 Python 3.4 运行 mypy 了,因为 Python 3.4 已经达到了它的生命周期。不过我们仍然可以输入针对 Python 3.4 的检查代码,官方暂时没有计划放弃对此的支持。

改进插件系统

  • 增加 get_additional_deps() 插件钩子以支持 django-stubs (PR 6598)
  • 对动态类使用 get_attribute_hook() 插件钩子 (lincolnq, PR 6371)

其他详细的改进和更新说明请查看发布公告

猜你喜欢

转载自www.oschina.net/news/105960/mypy-0700-released-up-to-4x-faster
0条评论
添加一条新回复