Starting from Apollo 6.0, building and testing Python applications in Apollo is done using Bazel exclusively. We use Bazel Python rules to build, run, and test Python programs. This not only frees us from hand-crafting Protobuf dependencies and managing Python related Env variables manually, but also helps with managing third party Python module dependency.
Generally you need a BUILD target for each python file, which could be one of
py_library(name="lib_target", ...)
py_binary(name="bin_target", ...)
py_test(name="test_target", ...)
load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test")
package(default_visibility = ["//visibility:public"])
py_binary(
name = "foo",
srcs = ["foo.py"],
data = ["//path/to/a/data/dependency"], # which we invoke at run time, maybe a cc_binary etc.
deps = [
":foolib",
"//path/to/a/py/library",
...
],
)
py_library(
name = "foolib"
srcs = ["foolib.py"],
deps = [
"//path/to/a/py/library",
...
],
)
py_test(
name = "foo_test",
srcs = ["foo_test.py"],
deps = [
":foolib",
"//path/to/a/py/library",
...
],
)
Above is a BUILD file template, you can also use the BUILD and BUILD file as examples.
-
To build any target:
bazel build //path/to:target
-
To run a binary target:
bazel run //path/to:target
-
To run a unit test target:
bazel test //path/to:target_test