PyCon US 2022 技术亮点:供应链安全、Python 新特性与性能优化

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

PyCon US 2022 技术主题总结

经过两年封锁、虚拟会议和隔离后,Python社区于2022年齐聚盐湖城参加PyCon。我们的两名工程师参会后确认:Python社区不仅活跃,还在蓬勃发展,多位演讲者展示了疫情期间开发的项目。

以下是值得关注的技术主题与亮点!

供应链安全

PyPI如何应对僵尸末日

供应链攻击和恶意行为者是全球性威胁。安装恶意包可能对组织和个人造成毁灭性影响。Python包索引(PyPI)维护者正积极提升Python供应链的安全性,包括通过增强认证保护包维护者,以及通过平台内置验证技术保护用户。

Dustin Ingram详细介绍了PyPI如何采用新安全措施大幅提升整体安全性与可信度。其中多项改进得益于高级工程师Will Woodruff和Alex Cameron的贡献(他们在演讲中获得特别致谢)。

  • pip-audit:可识别Python应用漏洞依赖项的新工具
  • Python版sigstore客户端:允许普通用户对Python包进行签名验证
  • 强制双因素认证:重要包将要求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[],改用list[]
  • |运算符替代Union类型(PEP 604),不再需要typing.Union[]
  • 通过零运行时开销的NewType创建具义类型,提升代码可读性与静态检查效果

模式匹配

Python 3.9引入了强大的模式匹配机制。原始PEP作者详细介绍了其历史、实现与未来:

  • PEP 622:初始讨论(因范围过大拆分为三个PEP)
  • PEP 634:面向实现者的规范
  • PEP 635:面向指导委员会的动机与原理
  • PEP 636:面向最终用户的教程

模式匹配不是switch语句!它在字节码和解释器层面优化了传统的if/elif/else模式,设计灵感来自Rust、Scala和Haskell,未来将进一步增强。

Python进入太空!

第二日主题演讲中,Sara Issaoun描述了Python在重构首张黑洞图像中的关键作用:使用整个地球作为卫星天线捕获PB级数据,然后用Python开发优化数据分析管道,将数据转换为仅几千字节的图像。这可能是历史上处理的最大数据集,且主要依靠Python完成。

2022年5月12日,银河系中心黑洞首张图像公布,Python再次成为呈现人马座A*图像的核心工具。

工具生态系统

Python生态中存在大量简化开发、测试、构建、协作与发布流程的工具。

简易二进制扩展

构建和打包二进制扩展传统上需要开发者使用CPython API编写C扩展。社区改进提供了更多选择:

  • pybind11:头文件式API,支持用C++编写Python扩展
  • scikit-build:支持用CMake替代setuptools构建二进制扩展
  • cibuildwheel:简化CI或本地环境下带二进制扩展的wheel构建测试

自动驾驶式开源维护

John Reese分享了自动化开源项目维护中繁琐任务的技巧:

  • 使用pyproject.toml定义项目元数据
  • 提供明确的依赖列表(版本既不过于特定导致冲突,也不过于泛化引发静默不兼容)
  • 创建从初始化到构建、测试、发布的可复现自动化流程
  • 引入自动化代码质量检查与格式化
  • 编写包含贡献者期望的易访问文档

未来展望

Python现已支持浏览器OS

周六主题演讲中,Peter Wang推出了PyScript alpha版本——完全在浏览器中运行的Python,支持与DOM和JavaScript库交互。浏览器已悄然赢得OS战争,将Python植入浏览器将降低新用户门槛。

演示包括REPL会话、DOM操作、Todo应用,以及与d3数据可视化库结合、用WebGL创建交互式3D动画。所有功能均可在浏览器内通过Python实现(多数情况下仅需单个HTML文件)。Peter甚至通过手势识别与计算机视觉在浏览器中用Python操控超级马里奥,引发轰动。

Python与速度需求

每个Python开发者都被问过“Python是不是很慢?”通过NumPy和Pandas等性能优化包,Python已证明能解决复杂问题(参见《Python在科学计算中的反直觉崛起》)。但作为解释型语言,降低解释开销和提升性能仍是重点。

即将发布的Python 3.11将包含CPython维护者的首轮性能改进(参考Anaconda的Pyston和Instagram的Cinder)。Kevin Modzelewski指出,开发者现在可采用以下模式以利用未来优化:

  • 避免重赋值全局变量(利用新查找缓存)
  • 保持对象属性结构一致(使用标志属性而非条件设置属性)
  • 直接调用对象方法而非局部缓存方法(因属性查找已优化)
  • 注意:当前优化仅适用于Python代码,C代码暂无法享受同等优化

结语

PyCon 2022不仅展示了惊人技术进展,还营造了包容友好的氛围:演讲者使用包容性语言,活动欢迎非技术人士、初学者和专家。盐湖城会议中心场地宽敞,周边餐饮便利。

PyCon 2022既是社区回归正常的标志,也是Python的突破时刻——它不仅保持跨行业流行编程平台地位,还持续扩大社区与用例范围。如闭幕演讲者Naomi Ceder所言:Python社区和整个开源模式建立在“赠礼文化”之上。Python“内置电池”的特性,正是社区成员贡献时间、工作和专业知识的结果。

感谢所有参与者造就了精彩的PyCon 2022!

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