bazel run运行testing_example提示找不到absl.testing模块
问题根因
Bazel运行时找不到absl.testing模块是两个原因共同导致的:
- 依赖声明不全:你当前BUILD文件里的
deps只声明了@io_abseil_py//absl:app,这个目标仅包含absl基础的app、flags相关模块代码,不包含absl.testing子包的内容。Bazel的Python构建遵循严格的显式依赖原则,沙箱运行环境只会把deps里声明的依赖打包到runfiles目录,不会自动拉取全局Python环境里安装的包,自然找不到未声明的testing模块。 - 本地环境和Bazel沙箱环境隔离:你本地直接执行
python testing_example.py能跑通,是因为本地conda环境里安装了完整的absl-py包,所有子模块都存在于site-packages目录下可以被直接导入,但Bazel运行时不会读取本地全局site-packages里的内容,完全依赖BUILD文件声明的依赖构建运行环境。
另外你当前用py_binary规则承载测试代码也不符合Bazel的惯例,测试类代码应该使用专门的py_test规则。
修复步骤
- 把规则类型从
py_binary替换为py_test,适配Bazel的测试工作流,后续可以直接用bazel test命令执行用例、获取测试报告。 - 补全缺失的依赖项,把absltest、flags对应的Abseil目标都加到deps列表里。
修正后的BUILD文件内容如下:
py_test( name = "testing_example", srcs = ["testing_example.py"], deps = [ "@io_abseil_py//absl:app", "@io_abseil_py//absl:flags", "@io_abseil_py//absl/testing:absltest", ], )
配置修改完成后,执行以下任意命令都可以正常跑通测试:
- 直接运行二进制:
bazel run //example_py:testing_example - 走Bazel标准测试流程:
bazel test //example_py:testing_example
内容的提问来源于stack exchange,提问作者Felipe Maion
相关产品推荐
相关产品推荐

