- 消息队列
- 流处理
- 后端
- 微服务
- 消息路由
【免费下载链接】pulsar
Apache Pulsar - distributed pub-sub messaging system
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 的策略,建议如下安排:
- 检查运行环境:确保你的 Python 环境满足"最近 4 个受支持版本"要求。以提案当时为例为 3.7~3.10;随着时间推移,最低支持版本会随 Python 官方 EOL 滚动抬升,请以 Pulsar 各版本发布的兼容性说明为准;
- 升级 Python 客户端依赖:在受支持版本上使用
pip install pulsar-client,避免在已废弃的 Python 版本上继续安装新 patch 版本(该版本将不再提供对应 wheel); - 迁移 Python Functions 运行时:Pulsar Functions 的 Python 实例以
python3为入口(见 python_instance_main.py),部署 Functions 的镜像与进程需使用受支持的 Python 3 解释器及配套依赖; - 无需改动 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
相关推荐
Apache Airflow 支持版本全解析:版本生命周期、Python/Kubernetes 支持策略与 EOL 管理
Apache Airflow 支持版本全解析:版本生命周期、Python/Kubernetes 支持策略与 EOL 管理 Apache Airflow 是一套用
后端任务调度工作流自动化数据编排批处理数据工程流程编排OpenAI Python SDK 的 Python 版本支持策略深度解析:从 `requires-python` 到月度自动化审查
OpenAI Python SDK 的 Python 版本支持策略深度解析:从 requires python 到月度自动化审查 OpenAI Python S
人工智能大模型labelme 平台支持策略解析:基于 SPEC 0 的 Python 支持窗口与 3.12 版本底线
labelme 平台支持策略解析:基于 SPEC 0 的 Python 支持窗口与 3.12 版本底线 labelme 作为一款基于 Python 与 Qt 的
数据标注计算机视觉桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考