Dropbox如何用四年完成400万行Python代码检查!

Dropbox通过mypy将数百万行Python代码转换为静态类型,以提高代码理解和生产力。面对性能挑战,他们实现了增量检查、远程缓存和mypy守护进程,甚至开发了mypyc编译器,将Python编译为C,提高运行速度。目前,已对400万行代码进行了类型检查,提升了项目质量和效率。
摘要由CSDN通过智能技术生成

作为 Python 的大用户之一, Dropbox 公司内部聚集了数百万行 Python 代码,动态类型的存在让代码越来越难以理解。因此,公司开始利用 mypy 逐步将代码转换为静态类型。虽然效果得到了充分验证,但整个过程充满了各种错误和失败。本文,Dropbox 公司完整输出了从项目研究到实践的 Python 静态检查全过程,以期对各位开发者有所帮助。

Python资源共享群:626017123

事实上,Python 已经成为 Dropbox 公司使用范围最广的语言,其广泛适用于后端服务与桌面客户端应用程序等(当然,Dropbox 公司也在大量使用 Go 、TypeScript 以及 Rust 等语言)。在 Dropbox 公司数以百万计的 Python 代码行中,动态类型的存在让代码越来越难以理解,并严重影响生产力水平。为了缓解这一问题,Dropbox 公司一直在利用 mypy 逐步将代码转换为静态类型(顺带一提,mypy 可能是目前 Python 当中最流行的独立类型检查器,属于开源项目,其核心开发团队来自于 Dropbox。)。

截至目前,Dropbox 已经在成千上万个项目当中使用 mypy,而且效果都得到了很好地验证。但对于此次全方位检查 Python 代码,Dropbox 仍然抱着忐忑的心情,整个过程也充满了错误与失败。在今天的文章中,Dropbox 将向大家分享 Python 静态检查之旅——从最早的学术研究项目,到现在逐步让类型检查与类型提示成为 Python 社区中众多开发人员的常规操作。现在,已经有多种工具支持类型检查功能,包括各类 IDE 与代码分析器等。

为什么要进行类型检查?

如果开发者只使用过动态类型的 Python,当然有可能对静态类型以及 mypy 感到陌生。甚至,不少开发者就是因为动态类型而喜欢上 Python,但这事儿在逻辑上就有点莫名其妙。其关键应该在于,静态类型检查是实现规模化的前提: 项目越大,需要的静态类型就越多。

一旦项目中包含成千上万行代码,而且有多位工程师在同时使用,以往开发经验告诉我们,理解代码内容就成了保障开发人员工作效率的关键所在。如果没有类型注释,基本的代码作用推理(例如找到函数的有效参数,或者可能的返回值类型)就会成为一大难题。以下是几个在缺少类型注释时,开发人员难以回答的典型问题:

  • 这个函数能返回 None 吗?
  • 这里的 items 参数是干什么用的?
  • id 属性是什么类型:到底是 int、str、抑或是自定义类型?
  • 这个参数需要的是一份清单、一个元组还是一个组?

只要有了类型注释,开发者能够很轻松地回答这些与代码片段相关的问题,例如:

 复制代码

classResource:
id:bytes
...
defread_metadata(self,
items:Sequence[str]) -> Dict[str, MetadataItem]:
...
  • read_metadata 并不会返回 None,因为返回类型不是 Optional[…]
  • items 参数代表一系列字符串,其不可能随意迭代。
  • id 属性为字节字符串。

在理想情况下,我们当然希望把这一切都记录在文档中,但拥有从业经验的开发者肯定知道没这么好的事儿。即使存在此类文档,我们也无法完全信任其中的内容——例如内容含糊不清或者不够准确,因此带来巨大的误解空间。对于大型团队或代码库,这类问题可能产生巨大的影响:

虽然 Python 在项目早期与中期阶段表现良好,但当项目发展到特定阶段后,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要使用PythonDropbox进行交互,您可以使用Dropbox的官方Python SDK - Dropbox API v2。这个SDK提供了一组Python函数和类,用于与Dropbox进行文件上传、下载、删除等操作。 您可以使用以下步骤来开始使用Dropbox Python SDK: 1. 首先,您需要安装Dropbox Python SDK。您可以使用pip命令来安装它: ``` pip install dropbox ``` 2. 接下来,您需要在Dropbox开发者门户(https://www.dropbox.com/developers/apps)上创建一个应用程序,以获取API密钥和密钥密钥。在创建应用程序时,选择"Scoped access"(有限访问)权限类型,并添加对应用程序文件的访问权限。 3. 在Python脚本中,导入`dropbox`模块并创建一个`Dropbox`对象: ```python import dropbox dbx = dropbox.Dropbox("<your_api_key>") ``` 4. 您现在可以使用`dbx`对象执行各种Dropbox操作。例如,要上传文件: ```python with open("local_file.txt", "rb") as f: dbx.files_upload(f.read(), "/remote_file.txt") ``` 要下载文件: ```python metadata, res = dbx.files_download("/remote_file.txt") with open("local_file.txt", "wb") as f: f.write(res.content) ``` 要列出特定文件夹中的文件: ```python result = dbx.files_list_folder("/folder_path") for entry in result.entries: print(entry.name) ``` 这只是Dropbox Python SDK的一小部分功能。您可以在Dropbox官方文档(https://dropbox-sdk-python.readthedocs.io/)中找到更多示例和详细信息。 希望这可以帮助到您!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值