嵌套工作区问题:同名包似乎被覆盖了?

nested workspace problems: packages with the same name seem to overwrite?

我正在开发一个需要嵌套工作区的项目——我们的项目有一个 git 存储库和一个子模块,两者都需要能够独立构建和 运行 bazel 测试。

结构是这样的:

projectA
    WORKSPACE
    tools/
        py/
          testing.py
    tests/
        sample_test.py
    projectB
        WORKSPACE
        tools/
           py/
              different_file.py

文件 sample_test.py 引用了 projectA/tools/py/testing.pyprojectB/tools/py/different_file.py

我的项目工作区有这样的配置:

local_repository(
  name = "projectB",
  path = __workspace_dir__ + "/projectB",
)

然后我的测试构建规则是这样的:

py_test(
    name = "sample_test",
    srcs = ["sample_test.py"],
    deps = [
        ":class_under_test",
        "//tools/py:testing",
        "@projectB//tools/py:different_file",
    ]
)

并且 testing.py 有这样的导入:

from tools.py.testing import functionA
from projectB.tools.py.different_file import functionB

现在,当我 运行 测试时,我得到一个 Python 错误,上面写着:

ImportError: no module named tools.py.testing

如果我注释掉两个导入并只说

import tools.py

在我的测试设置中,执行 print(tools.py),它显示 projectB!

中的测试路径
bazel-out/local-fastbuild/bin/analysis/py/test_name.runfiles/projectB/tools/py/__init__.pyc

正确的东西似乎在这里:

bazel-out/local-fastbuild/bin/analysis/py/test_name.runfiles/__main__/tools/py/testing.py

我在这里错过了什么?当然有一种方法可以让嵌套的工作空间能够引用相同的路径而不会互相破坏。

感谢您的宝贵时间!

当我在工作区文件中为 projectA 命名时,此问题自行解决:

workspace(name = "projectA")

我已经在项目 B 的 WORKSPACE 文件中有该行,但它在项目 A 中被跳过了。