谷歌开源一种基于 Python 实现的通用表达式语言 CEL-expr-python 。这是一种非图灵完备的嵌入式策略和表达式语言,旨在实现简单性、高效性、安全性和可移植性。
谷歌表示,“CEL 已成为策略执行、数据验证和动态配置等应用中广泛采用的技术”。此次发布提供了一个官方维护的实现,使得开发者可以在基础设施和应用程序中更便捷地使用一致的 CEL 。因此,Python 开发者现在可以使用专属的 CEL 运行时,而无需依赖社区支持的库。
CEL 团队决定通过封装官方的 C++ 实现来开发 CEL-expr-python,从而在最大程度上保持与 CEL 语义的一致性,同时让 Python 用户能够直接基于这个已准备就绪的 Python 核心进行扩展,从而获得丰富的使用体验。
封装官方 C++ 实现的另一个优势在于,未来 C++ 内核的任何改进(包括新功能和优化)都将自动被 CEL-expr-python 继承。
以下代码片段演示了如何初始化 CEL-expr-python 并评估一个表达式:
from cel_expr_python import cel# 定义变量cel_env = cel.NewEnv(variables={"who": cel.Type.STRING})expr = cel_env.compile("'Hello, ' + who + '!'")# 评估并打印编译后的表达式print(expr.eval(data={"who": "World"}))) // Hello, World!
在 Reddit 上,用户 rabornkraken 指出,能够编译表达式并在不同请求中重复使用,正是 CEL 的魅力所在:
我一直使用一个临时的 AST 解析器来处理功能开关,但维护起来非常麻烦 —— 表达式与运行时实际支持的功能经常不一致。如果有一个编译步骤能进行恰当的类型检查,许多问题就能在早期发现。
TristonianJones 是项目的维护者之一。他详细阐述了真正可以让 CEL 大放异彩的场景:
它非常适合嵌入到更庞大的策略或配置格式中,我们在存储库 github.com/google/cel-go 中提供了更完善的策略编写和组合工具链,但其优点在于,你可以使用 Go(或 Java)工具链进行编译,然后在 Python 中非常轻松地进行评估。
通用表达式语言(Common Expression Language)由谷歌设计,旨让开发者可以快速、安全地对条件和规则进行评估,并且具有可移植性,特别适用于 Kubernetes 和 Envoy 等高性能应用程序。它采用类似 C 语言的语法,并遵循“一次编译,多次评估”的原则,因此非常适合嵌入到需要具备快速、安全且灵活的策略评估功能的系统中。
CEL 是一种非图灵完备、无副作用且保证终止的语言,这使其非常适合用于安全的嵌入式规则评估,包括策略执行、数据验证、动态配置,以及基于用户输入或配置的运行时规则。此外,它还提供了极快的评估速度,“从纳秒到微秒”。
CEL-expr-python 已经在 GitHub 上发布,谷歌还通过 Codelab 提供了一份全面的教程。
声明:本文为 InfoQ 翻译,未经许可禁止转载。
原文链接:https://www.infoq.com/news/2026/03/google-cel-expr-python/





