PyCon US 2022亮点回顾:Python供应链安全、性能优化与浏览器运行

本文总结了PyCon US 2022的关键技术主题,包括PyPI供应链安全增强、Python 3.10+新特性如类型注解和模式匹配、二进制扩展构建工具、浏览器端Python运行框架PyScript,以及CPython性能优化策略。

PyCon US 2022 主题回顾 - Trail of Bits 博客

经过两年的封锁、虚拟会议、隔离和普遍混乱,Python社区齐聚盐湖城参加PyCon 2022。我们的两位工程师参加了会议,并很高兴地报告Python社区不仅活跃且健康,还在蓬勃发展,多位演讲者展示了他们在疫情期间开发的项目。

以下是我们喜欢的一些主题和亮点!

供应链安全

PyPI如何应对即将到来的僵尸末日

供应链攻击和恶意行为者对全世界构成持续威胁。安装恶意软件包可能对组织和普通人造成毁灭性影响。Python Package Index(PyPI)维护者正在积极努力为Python供应链提供额外的保护和安全措施。保护措施既涵盖包维护者的额外认证安全,也涵盖用户通过平台内置的新验证和信任技术下载包时的安全。

Dustin Ingram详细介绍了PyPI如何采用新的安全措施,这些措施大大提高了整个PyPI平台的安全性和信任度。PyPI及相关工具中的多项改进很大程度上归功于我们的高级工程师Will Woodruff和Alex Cameron,他们在演讲中获得了特别感谢。

  • pip-audit,一个新工具,可以识别Python应用程序中的易受攻击依赖项。
  • 一个新的Python sigstore客户端,允许普通用户对Python包进行签名和验证签名。
  • 对于对社区和PyPI本身重要的包,将需要双因素认证,其他包作者也将在不久的将来能够选择加入2FA。
  • 通过使用OpenID Connect集成的无凭证发布,您很快就能使用简单的配置设置直接从GitHub Actions发布包,而无需凭证。
  • 签名包元数据(PEP 458)和PyPI灾难恢复计划(PEP 480)为日常用户提供安全和信任,并从灾难性事件中恢复。

此外,Ashish Bijlani展示了一个名为Packj的新工具,该工具测试PyPI中的包以识别可能增加应用程序风险的行为,并检查其元数据和代码是否可能恶意。

近期Python的成功

自3.9版本发布以来,Python已切换到年度发布计划(PEP 602),这确保了新功能定期添加到语言中以保持其现代性。

注解:用代码记录代码

第一天的主题演讲由Łukasz Langa主持,他鼓励每个人在新代码中使用注解,将其添加到现有代码中,并利用现代注解语法糖。为什么?因为丑陋的类型注解暗示着丑陋的代码。

注解提高了代码可读性,并使IDE和静态代码分析器能够在运行时遇到问题之前识别问题。使用现代语法糖,编写注解比以往任何时候都更容易,包括:

  • 在注解中使用内置容器类型(PEP 585)。不再需要typing.List[]typing.Dict[],只需使用list[]dict[]
  • |操作符替换Union类型(PEP 604)。不再需要typing.Union[]
  • 创建不同的类型以提供含义,从而使代码更可读。例如:如果一个函数接受一个str参数,它可以是任何字符串吗?它可以是一段文本还是一个单词?类型别名和NewType构造是零运行时开销的,可以轻松添加以传达用户含义并改进静态类型检查结果。

模式匹配

Python 3.9获得了一个强大的模式匹配机制,原始模式匹配PEP的作者提供了一个演讲,详细介绍了模式匹配的历史、实现和未来。Brandt Bucher概述了PEP过程,其中包括四个不同范围和目标受众的PEP:

  • PEP 622 – 初始讨论。这个原始PEP被证明过于全面,因此被分解为三个较小的PEP。
  • PEP 634 – 规范,针对实现者。
  • PEP 635 – 动机和理由,针对指导委员会。
  • PEP 636 – 教程,针对最终用户。

模式匹配不是switch语句!它在字节码和解释器级别提供了优于传统if/elif/else模式的优化。

设计和实现受到了其他语言(如Rust、Scala和Haskell)中既定标准的影响,并包含一些Python语法魔法。模式匹配是一个非常令人兴奋的发展,未来的一些工作将使其更强大和高效。

Python在太空中的应用!

第二天的主题演讲由Sara Issaoun主持,描述了Python在重建著名的首张黑洞图像中的关键作用。Sara详细介绍了如何使用整个地球作为一个巨大的卫星天线来捕获 petabytes 的数据,然后在Python中开发优化的数据分析管道,将所有数据转换为仅几千字节的图像。这可能是历史上处理过的最大数据集,并且主要是在Python中完成的。

我们许多人都见过这张著名的图像,但知道Python在制作它中发挥了核心作用,为这门语言提供了更多的视角和欣赏。Python正在帮助回答科学中一些最重要的问题。5月12日,我们银河系中心巨大黑洞的首批图像被公布。Python再次是将人马座A*图像带给世界的主要组成部分。

工具生态系统

Python生态系统中有许多工具使开发、测试、构建、协作和发布过程更容易或自动化。

简易模式下的二进制扩展

构建和打包二进制扩展可能很繁琐,可能需要开发人员使用CPython API用C编写扩展。社区已经进行了多项改进,为构建和部署二进制扩展提供了更多选项。

Henry Schreiner III深入探讨了几个包和方法,使构建二进制扩展的过程更容易。

  • pybind11是一个仅头文件的API,用于用C++编写Python扩展,这使得集成C++代码和库更容易。
  • scikit-build允许项目使用CMake构建其二进制扩展,而不是setuptools或distutils方法。
  • cibuildwheel包使得构建和测试带有二进制扩展的wheel变得容易,无论是在CI还是本地。

自动驾驶模式下的开源维护

为了管理项目维护中所有不有趣的部分,John Reese就自动化领导开源项目时所有必要但繁琐的任务的技巧和窍门进行了演讲。

时间是我们无法购买的唯一资源。考虑到这一点,John提供了多个指南,可以使维护和贡献过程更容易。

  • 使用pyproject.toml文件定义关于项目的格式良好的元数据。
  • 提供明确定义的依赖项列表。版本不应过于具体,以免使用该包的开发人员遇到与其他依赖项的版本冲突。版本也不应过于通用,以免在升级依赖项后 silently 引入不兼容性。
  • 创建可重现和自动化的开发工作流,从初始设置到构建、测试和发布。执行发布应尽可能容易,以跟上用户的需求。
  • 引入自动化代码质量检查和代码格式化,以早期识别错误和潜在问题,并消除关于代码风格的猜测工作。
  • 编写易于访问的文档,包括对贡献者的期望。

未来是光明的

Python,现在支持浏览器操作系统

周六的主题演讲者Peter Wang介绍了PyScript的alpha版本——Python完全在浏览器中运行,支持与DOM和JavaScript库交互。Web浏览器已经默默地赢得了操作系统战争,将Python放入浏览器将使其对新用户更加易于接近。

展示了几个演示,这些演示运用了核心Python功能,如REPL会话,以及HTML功能,如操作DOM和一个简单的待办事项应用程序。更高级的演示展示了Python现在如何与流行的数据可视化库d3结合使用,并使用WebGL创建交互式3D动画。所有这些都可以在浏览器中运行的Python完成,并且在大多数情况下,在单个HTML文件中完成。

为了展示PyScript的全部功能,Peter在浏览器中玩了超级马里奥,用手势和计算机视觉控制马里奥,全部用Python完成,这极大地取悦了观众。PyScript正在推动Python的边界,并为新平台和架构未来证明这门语言。

Python和对速度的需求

每个Python开发者在某个时候都被问过这个问题:Python不是慢吗?通过性能优化的包如NumPy和Pandas,Python已经证明它足够快以解决一些最复杂的问题(参见《Python在科学计算中的反直觉崛起》)。但是,作为一种解释型语言,仍然需要努力减少解释开销并提高整体性能。

即将发布的Python 3.11将包含CPython维护者的第一组性能改进,他们使用Anaconda的Pyston和Instagram的Cinder作为改进的指南。

正如Kevin Modzelewski在他的演讲中详细说明的那样,开发者今天可以开始采用一些模式,这些模式将在未来版本中利用新的优化。过去,由于Python的动态特性,优化很难实现。例如,对在__init__()中设置的属性执行属性查找与通过setattr()动态设置的属性具有相同的性能成本。作为开发者,您以零成本获得动态特性。

然而,这些真正的动态特性比传统编程实践使用得少得多。因此,加速CPython的方法之一是优化静态用例,并允许真正的动态情况更慢并具有相关成本。现在,有了这个优先考虑静态代码实践的原则,静态查找可以被缓存和优化,而动态特性可以更慢,因为它们发生得少得多。

以下是开发者可以为CPython的新优化做准备的方法:

  • 不要重新分配全局变量。设置一次并引用或变异。这将利用新的查找缓存。
  • 保持对象具有相同的形状和相同的属性。使用标志属性而不是有条件地设置属性,以便属性查找利用新的查找缓存。
  • 直接在对象上调用方法,而不是在本地缓存方法。随着属性查找的优化,这取代了在循环中重复使用之前缓存方法的传统智慧。

传统建议是将性能关键代码移动到C以看到显著改进,然而,这可能不再是未来的情况。到目前为止的所有优化只能在Python代码中利用。因此,C代码将不会具有相同的优化,至少目前如此。

结束语

除了在PyCon 2022上讨论的一些惊人的技术发展和发现之外,还有一些无形的东西使会议愉快。每个人都极其友善、乐于助人和礼貌。演讲者使用包容性语言,整个活动感觉对非技术人员、初学者和专家都欢迎。广泛的主题、展位和活动确保每个人都有所收获。盐湖城会议中心是举办PyCon 2022的好地方,有足够的空间进行演讲,并且步行距离内有许多很棒的餐厅。

PyCon 2022真的感觉像是社区回归正常,也是Python的突破时刻,不仅保持在各个行业中最受欢迎的编程平台之一,而且增长其已经庞大的社区和用例。正如闭幕主题演讲者Naomi Ceder如此雄辩地说的那样,Python社区和整个开源模式建立在一种礼物赠送的文化之上。常见的说法是Python是一门“自带电池”的语言,但反思后,这之所以成立,只是因为社区中如此多的人贡献了他们的时间、工作和专业知识。感谢每个人为PyCon 2022做出的精彩贡献!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计