Python 运行时
Ambari 3.1.0 在 Linux 上要求 Python 3.9.2 或更高版本。默认软件包目标是 CPython 3.9(cp39)和 manylinux2014_x86_64 平台。Rocky Linux 8 明确使用 AppStream python39,Rocky Linux 9 使用系统 Python 3.9。软件包安装的运行时封装脚本会验证解释器,并选择与其匹配的 ABI。
源代码级别的最低版本并不意味着 cp39 RPM 与任何更高的 Python 次版本兼容。应使用与软件包原生扩展匹配的解释器;CPython 3.10 需要自己的软件包目标。Ambari 自有 Python 代码仍由 Ambari 维护。删除操作针对复制的第三方 fork,而不是删除经过验证的上游 wheel 中提供的所有 Python 源文件。
官方依赖
合并后的 Python 现代化改用官方软件包,而不是 vendored fork:APScheduler 3.11.3、Jinja2 3.1.6、MarkupSafe 3.0.3、stomp.py 8.2.0、websocket-client 1.9.0、cryptography 50.0.1、distro 1.9.0、javaproperties 0.8.2 和 PyYAML 6.0.3。vendored APScheduler、Jinja2、STOMP/WebSocket、加密库和测试 broker 源码不是运行时依赖。
simplejson 使用标准库 json 替代,mock 使用 unittest.mock 替代,pbkdf2 使用 hashlib.pbkdf2_hmac 替代。现有 AES-CBC v1 兼容性会保留,协议变更另行处理。
打包契约
Agent 和 Server 依赖在 Maven 构建期间安装到 Ambari 私有库。节点运行时不得执行 pip install。依赖要求经过 hash 锁定,主 lock 仅接受所选平台和 ABI 的二进制 wheel。docopt==0.6.2 是唯一例外:stomp.py 将其声明为硬依赖,因此从单独 hash 锁定的源代码分发包安装。
构建过程会先清理旧依赖目录,再审计已安装软件包的元数据和许可证,并生成 SBOM。默认平台为 Linux x86_64;python-wheel-aarch64 和 python-wheel-cp310 构建配置会生成彼此独立的制品,但这并不能证明所有平台组合均已通过生产验证。离线构建使用预先准备的 Wheel 仓库,并设置 PIP_NO_INDEX=true。
运行时封装脚本、依赖目录和原生扩展必须使用同一个 Python ABI。不得重新引入已经删除的 Python 2 扩展、Ambari 模拟器或测试工具包,也不得加入锁文件未声明的可选测试依赖。经过验证的上游发行包可以保留其 RECORD 元数据覆盖的文档、测试或示例。规范化工具会移除未使用但已声明的控制台或图形界面入口,并同步更新 RECORD;这不表示可以任意裁剪上游发行包。打包和迁移约束见 RPM 打包指南与升级指南。
源码证据
运行时和打包变更合并于 AMBARI-26643。Python 最低版本、解释器选择、Wheel 平台和 ABI 默认值、RPM 要求以及离线 Maven 安装行为,由当前 pyproject.toml、依赖锁文件、根 pom.xml、Agent pom.xml 和 Unix 运行时封装脚本共同定义。