编译Chromium CrOS时出现TemplateRuntimeError: no test named '>'如何解决
问题根因
报错核心是你当前使用的 Jinja2 2.8 版本不支持在 selectattr 过滤器中直接用 > 作为比较测试符,该语法是 Jinja2 2.10 及以上版本才新增的特性。
你编译普通Chrome目标不报错的原因是:只有编译CrOS全量目标时才会默认构建exo的wayland兼容性测试组件,该组件的代码生成模板用到了上述新语法,而autoninja -C out/Cros chrome不会构建这部分测试代码,因此无报错。
解决方案
- 方案1:升级Jinja2版本
直接通过pip3升级到2.10及以上版本即可,执行命令:
担心影响系统其他Python依赖的话,可以用venv创建独立虚拟环境,编译时激活虚拟环境即可。sudo pip3 install -U jinja2>=2.10 - 方案2:兼容旧版本Jinja2修改模板
打开出错的模板文件components/exo/wayland/compatibility_test/template_client_event_receiver_version_tests.cc.tmpl,将第32行的:
中的{% if interface.events|selectattr("since")|selectattr("since", ">", min_version)|list|length %}">"替换为Jinja2旧版本支持的"greaterthan"即可,修改后为:{% if interface.events|selectattr("since")|selectattr("since", "greaterthan", min_version)|list|length %} - 方案3:禁用不需要的测试构建
如果你不需要使用wayland兼容性测试,直接在GN参数中禁用该组件构建即可,执行gn args out/Cros,在打开的配置文件中添加:
保存后重新执行编译命令即可正常构建。build_exo_wayland_compatibility_tests = false
内容的提问来源于stack exchange,提问作者Fangzhen Song
相关产品推荐
相关产品推荐

