Как загрузить несколько зависимостей в правило py3_image bazel

Я недавно начал работать с bazel, поэтому, по общему признанию, мало знаю о тонкостях bazel. Я использую bazel для создания образов докеров, но я хочу использовать несколько depsвнутри правила py3_image.

У меня есть 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 .

и страница github для правил докеров: https://github.com/bazelbuild/rules_docker

Если мне не хватает каких-то очевидных знаний, пожалуйста, также дайте ссылку на чтение.

2 ответа

Этого можно добиться с помощью функции 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"]
)
Другие вопросы по тегам