如何在py3_image-bazel规则中加载多个依赖项



我最近开始与巴泽尔合作,所以无可否认,我对巴泽尔的复杂性知之甚少。我使用bazel生成docker图像,但我希望在py3_image规则中使用多个deps

我有一个BUILD.bazel,它有如下python规则:

load("@io_bazel_rules_docker//python3:image.bzl", "py3_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
load("@custom_deps//:requirements.bzl", "requirement")
exports_files(["component.yaml"])
py3_image(
name = "custom",
srcs = [
"src/payload_populator/bq_populator.py",
"src/payload_populator/cloudsql_fetcher.py",
"src/payload_populator/config.py",
"src/payload_populator/SingleListing.py",
"src/payload_populator/sql.py",
"src/custom/browse.py",
"src/custom/closet.py",
"src/custom/constants.py",
"src/custom/listing.py",
"src/custom/util.py",
"src/session/session.py"
],
base = "@python//image",
main = "src/payload_populator/bq_populator.py",
visibility = ["//visibility:public"],
deps = [
requirement("google-cloud-bigquery"),
requirement("google-cloud-core"),
"//common:common_lib",
],
)
# https://github.com/bazelbuild/rules_docker/tree/e15c9ebf203b7fa708e69ff5f1cdcf427d7edf6f#container_push
container_push(
name = "push_custom",
format = "Docker",
image = ":custom",
registry = "gcr.io",
repository = "rental-ds/custom",
tag = "$(BRANCH_NAME)",
)

我的代码在中依赖120多个依赖项

deps = [
requirement("google-cloud-bigquery"),
requirement("google-cloud-core"),
"//common:common_lib",
],

我不想为了在代码中使用它们而单独列出所有这些。有没有一种简单的方法可以一次性从requirement导入所有这些内容,或者绕过我对requirement("library")的调用?

我试着搜索Bazel文档:https://docs.bazel.build/versions/main/be/python.html

以及docker规则的github页面:https://github.com/bazelbuild/rules_docker

如果我遗漏了一些显而易见的知识,请链接参考资料以供阅读。

它可以通过bazel.build/reference/be/functions#glob函数来实现。你试过了吗。似乎是老问题,但想看看。

每个包中都有BUILD.bazel文件,这为在代码附近表达单元测试提供了一个方便的地方,然后srcs变成了唯一的本地文件,deps将取决于您的包:

py_binary(
name = "my_app",
srcs = glob(["*.py", "src/my_app/*.py"]),
deps = ["src/payload_populator", "src/custom"],
)
py_image(
name = "app_image",
deps = [":my_app"],
cmd = ["./my-app"]
)

最新更新