查看原文
其他

【新开源报道 36】有效减少错误代码!Instagram 开源用于 Python 3 的 MonkeyType 工具

2017-12-26 开源最前线
开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:https://engineering.instagram.com/let-your-code-type-hint-itself-introducing-open-source-monkeytype-a855c7284881、GitHub


Instagram 宣布将其 MonkeyType 工具开源。它是通过运行时跟踪类型自动将类型注释添加到您的 Python 3 代码的工具。


Python 3代码管理工具 MonkeyType

授权协议:BSD

开发语言:Python

操作系统:跨平台

项目地址:https://github.com/Instagram/MonkeyType


MonkeyType 简介


MonkeyType 是通过运行时跟踪类型自动将类型注释添加到您的 Python 3 代码的工具。


在 Instagram 上,有数百名工程师编译超过一百万行的代码在 Python 3上。在不同的生产环境中每天都在加入新的代码,所以 Instagram 一直在寻找一种新方法可以使代码更易于阅读和理解,并且更加适合静态分析,以此减少错误代码的频率。


MonkeyType 需要 Python 3.6+ 和 retype 库(用于施加型存根的代码的文件),只生成 Python 3 类型的注释(无类型注释)。Instagram 基础设施团队工程师 Carl Meyer 表示:在 MonkeyType 的帮助下,我们已经在代码库中对三分之一的功能进行了注释,而且我们已经看到了类型检查会捕获更多的错误。



使用入门


在 MonkeyType 告诉我们任何有用的东西之前,我们需要让它跟踪一些函数调用。最简单的方法是 monkeytype run 在 MonkeyType 跟踪下运行任何 Python 脚本。例如,您可以在 MonkeyType 下轻松运行您的测试套件:



当你的测试运行时,MonkeyType 检查每个函数调用的参数类型和返回/ yield类型,并将它们记录在数据库中。(默认情况下,它会根据这些数据生成存根文件,并可以使用retype将这些存根文件直接应用到您的代码中。)


当然,你的测试套件可能不提供最好的类型信息 - 有时候测试使用的是假类型,而不是真正的类型,我们发现很多情况下类型检查显示我们的测试意外地从生产中传入不同的类型。因此,如果您不想基于测试套件进行注释,则可以记录生产运行时的调用跟踪。对于这个用例,MonkeyType提供了一个上下文管理器API:




如果你需要更多的灵活性,你可以创建自己的 CallTracer,安装它 sys.setprofile(),并准备好时将其删除。



如何在 Instagram上使用MonkeyType


我们选择一个小的随机生产 Web 请求样本,并通过 Django 中间件打开 MonkeyType。使用自定义 CallTraceStore 从 SCUBA(Facebook的数据分析平台)存储和检索跟踪。因为不断地进行追踪,所以代码总是在更新的,生产代码频繁变化,这使我们的记录都是保持最新的那个。

 

每当工程师想要向模块添加类型注释时,他们只需运行 monkeytype stub,然后 monkeytype apply 修复新注释显示的任何错误类型,然后提交!


附:新开源报道汇总

《【新开源报道 35】国内第一家私有视频通信软件 Tucodec 开源》

《【新开源报道 34】AMD 开源基于 Mesa 的 Vulkan Linux 驱动》

《【新开源报道 33】安全软件公司 Avast 开源机器码反编译器 RetDec》

《【新开源报道 32】谷歌开源 TFGAN:轻量级生成对抗网络工具库》

《【新开源报道 31】国内首套开源持续集成(CI) 解决方案 flow.ci 开源啦》

《【开源推荐 30】苹果开源领域又一深造:开源机器学习框架 Turi Create》

《【新开源推荐 29】AI开发者的福音:360公司宣布开源深度学习调度平台 XLearning!》

《【新开源推荐 28】百度正式开源 Linux 发行版 MesaLock Linux》

《【新开源报道 27】百度开源高性能 Python 分布式计算框架 Bigflow》

《【新开源报道 26】滴滴开源基于 Vue.js 的移动端组件库 cube-ui》

《【新开源报道 25】Google 开源 Docker 镜像差异分析工具 container-diff》

《【新开源报道 24】美团点评开源MySQL闪回工具 —— MyFlash》

《【新开源报道 23】IBM 推出首套开源现代化字体 —— IBM Plex》

《【新开源报道 22】Microsoft 开源用于 VS Code 的 Java Debugger》

《【新开源报道 21】阿里开源容器技术Pouch和P2P文件分发系统“蜻蜓”》

《【新开源报道 20】Uber正式开源其分布式跟踪系统Jaeger》

《【新开源报道 19】Uber与斯坦福大学开源深度概率编程语言Pyro》

《【新开源报道 18】谷歌开放内部工具 Colaboratory 来协助 AI 开发》

《【新开源报道 17】这波开源满分!清华大学开源网络嵌入的工具包 —— OpenNE

《【新开源报道 16】AI开发者福音!微软亚马逊联合发布深度学习库 Gloun》

《【新开源报道 15】谷歌发布量子开源软件,量子计算机对科学家免费开放 》

《【新开元报道 14】微软开源用于Spark的深度学习库MMLSpark》

《【新开源报道 13】Facebook 开源帮助开发者消灭最顽固的软件 bug 的工具》

《【新开源报道 12】不只是阿里巴巴的操作系统,AliOS 宣布开源》

《【新开源报道 11】重磅!阿里巴巴正式开源全球化OpenMessaging和ApsaraCache项目》

《【新开源报道 10】IBM 和谷歌等巨头联手为开发者推出开源容器安全工具Grafeas》

《【新开源报道 9】Google开源Abseil,为C++和Python开发提供支持》

《【新开源报道 8】serverless 领域的福音!Oracle 宣布开源 Fn project》

《【新开源报道 7】苹果在 GitHub 上公布 macOS 和 iOS 内核源码》

《【新开源报道 6】百度开源移动端深度学习框架mobile-deep-learning(MDL)》

《【新开源报道 5】百度正式开源其 RPC 框架 brpc》

《【新开源报道 4】IBM 开源动态的应用服务器运行时环境 Open Liberty》

《【新开源报道 3】微信后台团队最近开源力作:PhxQueue分布式队列》

《【新开源报道 2】喜大普奔!阿里即将开源 ApsaraCache,云数据库 Redis 版分支》

【新开源报道 1】腾讯 Web UI 解决方案 QMUI Web 正式回迁开源》



●本文编号124,以后想阅读这篇文章直接输入124即可

●输入m获取文章目录

↓↓↓ 点击"阅读原文" 进入GitHub详情页 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存