☰
Apache Pulsar PIP-155 深度解析:彻底移除 Python 2 支持,确立 Python 3 版本滚动支持策略
2026/10/9 5:07:08 网站建设 项目流程
  • 消息队列
  • 流处理
  • 后端
  • 微服务
  • 消息路由

【免费下载链接】pulsar

Apache Pulsar - distributed pub-sub messaging system

项目地址:https://gitcode.com/gh_mirrors/pu/pulsar
点击查看免费下载

PIP-155(Proposal for Improvement 155)是 Apache Pulsar 社区正式宣告放弃 Python 2 兼容性的设计提案:Pulsar Python Client 与 Pulsar Functions 从此不再为 Python 2.7 构建产物、运行测试或分发 wheel 文件,并确立"仅支持最近 4 个 Python 主版本、从发布到 EOL 提供 5 年支持窗口"的滚动支持策略。本文将围绕该提案完整展开:先梳理 Python 2 退役的历史背景与 Pulsar 的支持现状,再逐条解读目标、API 影响与三项具体变更,最后结合当前仓库源码给出落地证据与迁移建议,帮助你在升级 Python 依赖、构建 Pulsar 客户端或编写 Python Functions 时准确把握版本边界。

背景:Python 2 的退役与 Pulsar 的抉择

Python 2.x 在多年前就已停止持续演进,官方宣布其生命周期在 2020 年 1 月正式结束(即 EOL)。PIP-155 明确写道:Python 2.x 已被弃用多年,且官方 EOL 已过去约 2.5 年,因此 Pulsar 社区认为已经到了必须为 Pulsar Python Client 与 Pulsar Functions 移除 Python 2.7 兼容性的时间点。

按照 Python 社区的生命周期管理惯例,在一个时间点上"仍在支持期内"的 Python 主版本通常为 4 个。PIP-155 提出时,这 4 个版本依次是3.7、3.8、3.9 和 3.10。每个版本从正式发布到 EOL 约有5 年的支持周期。

这一背景决定了 PIP-155 的核心立场:不追求"尽可能兼容更多旧版本",而是跟随 Python 官方支持窗口,保持客户端与 Functions 运行时始终运行在受支持的、可获得安全修复的 Python 版本之上。

目标:确立"最近 4 个 Python 版本"滚动支持策略

PIP-155 提出的核心目标是:

  • Pulsar Python Client 与 Pulsar Functions仅支持最近 4 个 Python 发布版本(提案当时即 3.7、3.8、3.9、3.10);
  • 当一个 Python 版本达到 EOL 时,Pulsar 也随之将其移除支持范围。例如,当 3.7 达到生命周期终点后,Pulsar 将同步停止对 3.7 的支持;
  • 该策略同样适用于Pulsar 的 patch 版本发布:对于已经废弃的 Python 版本,patch 版本将不再提供对应的 Python wheel 文件。

这意味着版本的"下限"是动态滚动的:随着 Python 官方 EOL 时间表推进,Pulsar 支持的最低 Python 版本会逐步抬升,而不是长期停留在某个固定版本上。对于使用旧版 Python 的部署方,需要按此节奏规划客户端与 Functions 运行时的升级窗口。

API 影响:零变更 + 解锁 Python 3 专属能力

PIP-155 对 API 的评估结论是:

当前阶段没有任何 API 变更。

也就是说,移除 Python 2 支持不改变Pulsar Python Client 的公开 API 表面,也不改变 Python Functions 的接口签名。从 Pulsar Python Client 迁移到 Python 3 的应用,无需修改调用代码即可继续工作。

但更重要的是隐含收益:一旦不再需要兼容 Python 2.7,Pulsar Python Client 库将被"解放"——它现在可以自由使用 Python 3 特有的语法与第三方库,例如:

  • async/await原生协程语法;
  • dataclasses、f-string、类型注解等现代语言特性;
  • 仅支持 Python 3 的依赖生态(如新版grpcio、protobuf、fastavro等)。

从源码结构看,Pulsar Functions 的 Python 实例入口 python_instance_main.py 已经以#!/usr/bin/env python3作为 shebang,直接声明运行环境为 Python 3,这正是"运行时全面 Python 3 化"的直接体现。

三项具体变更:从 CI 到交付物的全链路切换

PIP-155 列出了落地本次策略的三项具体变更,覆盖了"测试 → 集成 → 交付"三个环节:

1. CI 构建切换:Python Client 库测试改用 Python 3 运行

第一项变更是在 CI 中把 Pulsar Python Client 库的单元测试运行环境从 Python 2 切换为 Python 3。这保证所有客户端代码路径(包括消息发送/接收、Schema、认证等)都在受支持的 Python 3 解释器上被持续验证。

2. 集成测试切换:全面使用 Python 3

第二项变更是将集成测试(integration tests)切换为 Python 3。集成测试覆盖的是客户端与真实 Broker/Proxy 集群的端到端交互,切换到 Python 3 后,可以确保真实使用场景(而非仅单元级)也完全运行在受支持版本之上。

3. 停止构建与分发 Python 2.7 的 wheel 文件

第三项变更,也是最直接的交付物变化:不再为 Python 2.7 构建 wheel 文件,也不再在发布中分发它们。从 Pulsar 的 patch 版本开始,pip install pulsar-client在 Python 2.7 环境中将无法再获取到对应版本的 wheel 包。这是"移除支持"在安装层面上的最终体现——旧环境将无法通过常规 pip 途径安装新版本客户端。

仓库中的落地证据:PIP-155 之后的真实状态

当前仓库中 Python 相关的代码与脚本已完全呈现 Python 3 化的状态,可作为 PIP-155 落地的直接佐证:

  • Functions Python 实例入口:python_instance_main.py 第一行为#!/usr/bin/env python3,其内部使用argparse、asyncio等 Python 3 生态能力,且直接import pulsar、Function_pb2、grpc相关模块,构成完整的 Python Functions 运行栈;
  • Python 实例测试脚本:run_python_instance_tests.sh 中通过PYTHON_BIN=${PYTHON_BIN:-python3}显式默认使用python3运行测试,并安装pulsar-client[all]、grpcio、protobuf等 Python 3 依赖;脚本注释还说明测试依赖版本需与 docker/pulsar/Dockerfile 中生产环境安装的版本保持一致;
  • Python 实例测试用例:pulsar-functions/instance/src/test/python 目录下的test_python_instance.py、test_python_instance_main.py、test_secretsprovider.py等模块,均由python3 -m unittest驱动,验证上下文实现、实例主流程与 Secret Provider 行为;
  • Python Client 代码仓库迁移:仓库内的 pulsar-client-cpp/python/README.md 注明 Apache Pulsar Python Client 代码已迁移至独立的apache/pulsar-client-python仓库,其版本管理与 Python 3 支持策略在独立仓库中持续演进。

从这些文件可以确认:PIP-155 并非停留在提案层面,仓库中的 CI 脚本、运行时入口与测试基础设施均已按"仅 Python 3"执行。

对开发者的影响与升级建议

基于 PIP-155 的策略,建议如下安排:

  1. 检查运行环境:确保你的 Python 环境满足"最近 4 个受支持版本"要求。以提案当时为例为 3.7~3.10;随着时间推移,最低支持版本会随 Python 官方 EOL 滚动抬升,请以 Pulsar 各版本发布的兼容性说明为准;
  2. 升级 Python 客户端依赖:在受支持版本上使用pip install pulsar-client,避免在已废弃的 Python 版本上继续安装新 patch 版本(该版本将不再提供对应 wheel);
  3. 迁移 Python Functions 运行时:Pulsar Functions 的 Python 实例以python3为入口(见 python_instance_main.py),部署 Functions 的镜像与进程需使用受支持的 Python 3 解释器及配套依赖;
  4. 无需改动 API 调用代码:由于 PIP-155 明确"无 API 变更",已有基于 Pulsar Python Client 编写的生产者、消费者与 Functions 代码在切换到受支持 Python 3 环境后可直接运行,仅需在新语法/新依赖引入后保持测试覆盖(CI 已切换为 Python 3,见 run_python_instance_tests.sh)。

总结

PIP-155 为 Apache Pulsar 的 Python 生态划定了清晰的生命周期边界:不再为已 EOL 的 Python 2 承担兼容成本,转而采用"最近 4 个 Python 版本、5 年支持窗口"的滚动策略。三项落地变更(CI 用 Python 3 测试、集成测试切换 Python 3、停止分发 Python 2.7 wheel)使该策略完整覆盖了从开发验证到最终交付的每个环节,而仓库中#!/usr/bin/env python3的实例入口与默认python3的测试脚本则是最直接的执行证据。对于 Pulsar 的 Python 使用者,这条策略意味着更现代的语法与库、更健康的安全支持面,以及一个可预期的升级节奏。

  • 消息队列
  • 流处理
  • 后端
  • 微服务
  • 消息路由

【免费下载链接】pulsar

Apache Pulsar - distributed pub-sub messaging system

项目地址:https://gitcode.com/gh_mirrors/pu/pulsar
点击查看免费下载

相关推荐

上一篇:Gentle-AI 的 review-refuter 审查驳斥者契约:事务级只读取证与推理型严重发现的对抗验证机制
下一篇:ExtFUSE内核模块开发:如何编写高效的eBPF处理程序

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询