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!