11 KiB
Python 社区采访 sebastán ramírez
今天,我和爆炸人工智能的软件开发员塞巴斯蒂安·拉米雷斯在一起。他也是流行框架 FastAPI 和 Typer 的创造者。在这次采访中,我们将讨论 Python 中的类型、他创建 FastAPI 的动机以及该框架的未来等等。事不宜迟,我们开始吧。
Sebastián,感谢你的参与。我想从我问所有客人的问题开始:你是如何进入编程的,你是什么时候开始使用 Python 的?
塞巴斯蒂安:感谢邀请我😁
我大约十五岁时开始从事编码工作,试图为我父母的生意建立一个网站。我写的第一个真正的“代码”是一个带有alert("Hello World")的 HTML 中的一些 JavaScript 。我仍然记得看到那条小小的警告信息时的激动,以及想到我已经把它编码成的强烈感觉。
多年来,我害怕学习任何其他语言,认为我必须“至少”先掌握 JavaScript。几年后,我当时参加的许多在线课程中有一门需要 Python 来控制 AI 吃豆人和其他东西。这门课有一个很长的教程,里面只有 Python 的基础知识,这对于这门课来说已经足够了。我真的很想尝试一下,所以我继续学习基础教程。
当然,我很快就爱上了 Python,并希望我能早点开始😅
你目前是 Explosion AI 的软件开发人员,该公司开发了流行的自然语言处理(NLP)框架 spaCy 。你能谈谈你的日常生活吗?人工智能和机器学习有哪些让你感兴趣的地方,Explosion AI 创造了哪些工具来帮助开发者推动这两个领域的边界?
Sebastián: 是的,Explosion 最出名的是开源 NLP 工具包 spaCy 。他们还创造了 Prodigy ,这是一个商业的、可脚本化的工具,用于有效地注释机器学习数据集。我的工作主要是在 Prodigy Teams 上,Prodigy 的云版本专注于有多个用户的团队。由于该产品非常以隐私为中心,制作团队/云版本有许多特殊的挑战。
然而,我最近决定离开公司。我目前(在我写这篇文章的时候)正在结束我积累的所有假期😁
我的计划是安排一种方式,将我大部分的工作时间用于 FastAPI、Typer 和其他开源项目,同时可能做一些咨询,帮助其他团队和公司使其可持续发展🚀
里奇: 人们可能知道你是 FastAPI 的创造者,这是一个用于构建API的高性能 web 框架,已经迅速成为最受欢迎的 Python web 框架之一。是什么给了你建造它的灵感,你对它的未来有什么规划?对于那些还没有尝试 FastAPI 的人来说,为什么他们会选择在他们的下一个 API 中使用它,而不是其他流行的框架,比如 Flask 和 Django ?
Sebastián: 事实上,多年来我一直避免构建一个新的框架。
我首先学习并使用了许多框架、插件和工具,总是改进我的工作流程(以及我所领导的开发人员的工作流程),同时使我们正在构建的产品更好。当我在创业公司工作的时候,我总是在转换,快速创造新产品,等等。,我有机会在寻找“正确的”工作流和工具的过程中重复了很多,将现有的框架与许多插件和工具相结合。
与此同时,我也有机会从事其他领域的工作,比如 JavaScript 前端、TypeScript、几个框架、一些混合应用程序、一些电子桌面应用程序等等。大多数或所有的项目都是以数据为中心的(数据科学、机器学习等)。),所以拥有良好的数据通信方式总是很重要的。
到那时,我已经从几个框架、工具甚至其他语言和生态系统中获得了许多我喜欢的特性:
- 编辑器中的自动完成功能
- 编辑器中的自动错误检测(类型检查)
- 代码简单性
- 自动数据验证
- 自动数据转换(序列化)
- 自动化 API 文档
- 对标准的支持,比如用于 web APIs 的 OpenAPI、用于身份验证和授权的 OAuth 2.0 以及用于数据文档的 JSON 模式
- 依赖注入来简化代码并提高实用程序的重用性
- 良好的性能/并发性
但是在构建 web APIs 时,我没有办法同时拥有所有这些特性,我想出的最佳工作流程仍然有缺陷和警告。它需要困难的插件集成、过时的组件、没有文档记录的工具、重复的代码等等。
但是到了某个时候,就没有别的方法可以尝试了。那是我的暗示。我开始研究标准,比如 OpenAPI、JSON Schema、OAuth 2.0 等等。我开始设计我希望它如何工作,首先在几个编辑器上测试,在编写实际的内部代码之前优化开发人员的体验。
然后,我确保我为 FastAPI 准备了正确的构件: Starlette (用于所有的 web 部件)和 pydantic (用于所有的数据部件),它们都有很好的性能和特性。最后,我开始实现那些基于标准和我能想到的最好的开发者体验的设计,加上一些额外的东西(比如依赖注入系统)。
文档中有更多关于 FastAPI 的历史、设计和未来的背景,还有关于 T2 的替代方案、灵感和比较。简而言之,FastAPI 诞生于许多其他工具、API 设计和想法的学习和灵感,并建立在非常坚实的基础之上(Starlette 和 pydantic)。
对于那些好奇想尝试一下的人,我建议查看一下主页或自述并跟随那个迷你教程。在 15 到 20 分钟内,你将会非常清楚 FastAPI 是如何工作的,不管你喜不喜欢,也不管它对你是否有用。
对于那些已经在现有产品中使用其他框架的人来说,不要仅仅因为 FastAPI 看起来光鲜亮丽就急于迁移到它。如果你的产品运行良好,你不需要新的特性,或者如果你不需要 FastAPI 的好处,那么就不值得更换。
然而,如果您想迁移到 FastAPI,这实际上相对简单,因为没有复杂的集成。你可以直接使用普通的 Python 包结合 FastAPI,你可以通过小部分进行迁移,或者用 FastAPI 只创建新的组件。
Ricky: Typer 是你建立的一个命令行界面(CLI)框架,与 FastAPI 类似,它严重依赖于 Python 的类型化。我注意到一个模式😉是什么让你如此喜欢类型化,你觉得应该有更多的库拥抱 Python 的类型化吗?
**塞巴斯蒂安:**是的,完全!这里有一个非常强大的模式。类型注释(或类型提示)是编辑器中自动完成和类型检查的动力。这些类型注释就是为了这个目的而发明的。仅仅这两个特性就证明了使用它们的合理性。
更重要的是,如果它在一个工具中,预计会被其他开发者使用,我真的希望许多 Python 包可以处理,例如,基础设施或 SaaS 客户端将完全采用类型注释。这将极大地改善开发人员的生活,并使他们的工具更容易被采用。
但是现在,在 pydantic、FastAPI 和 Typer 的情况下,那些类型注释已经包含了许多可以用来制作更强大工具的信息。它们隐式包含文档信息,如“姓名应该是字符串”和“年龄应该是浮点数”
关于类型注释的信息也可以用于数据验证,例如,如果函数期望一个字符串,但收到一个字典。这是一个可能被报告的错误,如果框架是基于接收参数的函数,那么框架(比如 FastAPI 或 Typer)可以解决这个问题。
然后这些类型注释也可以用于数据序列化。例如,在 URL 中,一切都是字符串,在 CLI 中也是如此。但是,如果我们在类型注释中声明我们想要一个整数,框架(FastAPI 或 Typer)可以尝试将来自 URL 或 CLI 的类似"42"的字符串转换为我们代码的实际整数。
因此,通过一个非常直观和简单的代码片段来声明变量的类型,我们可以在两个原始特性(自动完成和类型检查)的基础上突然获得三个额外的特性(验证、序列化、文档)。这是从很少的编码工作中提取的大量价值。
在绝大多数情况下,所有这些特征都需要完全相同的信息:“年龄是一个整数。”因此,通过重用同一段代码(类型注释)来声明它,我们可以避免大量的代码重复。如果我们决定在某个地方改变类型(比如为了验证),但是忘记在其他地方更新它(比如文档),我们可以保持真实的单一来源并避免将来的错误。
通过单一的类型声明,我们可以避免许多与不同步的重复代码相关的错误。而这些特性正是 FastAPI 和 Typer 所提供的。
现在你已经创建了非常流行的现代 CLI 和 web 框架,你对未来有什么计划?你对其他正在进行的项目感到兴奋吗?
是的,我有很多计划。也许太多了😬
我想给 FastAPI 和 Typer 添加几个特性。我还想为 FastAPI 开发一个独立于数据库的自动管理用户界面(基于 OpenAPI)。我想为需要 SQL 数据库的用例研究一种混合 pydantic 和 SQLAlchemy 的方法(同样,利用这些类型注释并减少代码重复)。
我还想对项目生成器进行大量改进。我想改进、简化并更好地记录 OAuth 2.0 的所有实用程序,使用范围、与第三方进行认证等等。
我也想,在某个时候,尝试做一些视频,可能是一门课程,多做一些关于学习所有这些东西的内容。
里基: 现在只剩下最后几个问题了。你在业余时间还做些什么?除了 Python 和编程,你还有什么其他的爱好和兴趣?
塞巴斯蒂安:我最近没有太多时间做其他事情,但我希望这种情况在未来会有所改变😅当我可以的时候,我喜欢和我的妻子玩电子游戏(或者有时自己一个人),看电影,和柏林的朋友一起去吃早餐或者喝咖啡(当周围没有疫情的时候)。
我也真的很喜欢从事这些开源项目,所以我可以很容易地在周末花上几个小时而不会注意到它😁
非常感谢邀请我!很荣幸能和很多我追随和敬佩的人分享这个舞台。
谢谢你参加我的采访,塞巴斯蒂安。很高兴与你交谈。
如果你想就 FastAPI 或我们今天谈论的任何事情与 Sebastián 联系,那么你可以通过 Twitter 与他联系。
如果你想让我采访 Python 社区中的某个人,请在下面留下评论或在 Twitter 上联系我。
