Bazel 构建文件加载多个依赖项

Bazel build file load multiple dependencies

我有一个 Python 存储库,其中包含两个需求文件。在我的 WORKSPACE 文件中,我导入了两个依赖项。

要求-1.txt:

numpy

要求-2.txt:

scipy

工作空间:

load("@rules_python//python:pip.bzl", "pip_install")

pip_install(
    name = "deps_1",
    requirements = "//:requirements-1.txt",
)

pip_install(
    name = "deps_2",
    requirements = "//folder2:requirements-2.txt",
)

我有一个这样的 BUILD 文件:

load("@rules_python//python:defs.bzl", "py_library")
load("@deps_1//:requirements.bzl", "requirement")
load("@deps_2//:requirements.bzl", "requirement")


py_library(
    name = "test",
    srcs = ["test.py"],
    deps = [
        requirement("numpy"),
        requirement("scipy"),
    ],
)

构建无法导入 numpy

no such package '@deps//pypi__numpy': BUILD file not found in directory 'pypi__numpy' of external repository @deps2. Add a BUILD file to a directory to mark it as a package.

如何在同一个 BUILD 文件中加载两个依赖项?

一般来说,你可以通过加载不同名称的两个requirement来实现。像这样:

load("@deps_1//:requirements.bzl", deps_1_requirement = "requirement")
load("@deps_2//:requirements.bzl", deps_2_requirement = "requirement")

那么你可以使用deps_1_requirement("numpy")deps_2_requirement("scipy")

但是,对于这两个特定的库,scipy 取决于 numpy。如果你同时加载它们,你最终会得到两个不同的 numpy 副本。如果它们都是相同的版本,它可能会起作用。如果它们是不同的版本,您可能 运行 会遇到奇怪的问题。我认为您可以从列表中删除 numpy,您的代码应该能够导入 pip/rules_python 引入的单一版本,因为它是 scipy.

的依赖项