【问题标题】:nested workspace problems: packages with the same name seem to overwrite?嵌套工作区问题:同名的包似乎被覆盖了?
【发布时间】:2017-05-01 23:42:57
【问题描述】:

我正在开发一个需要嵌套工作空间的项目——我们的项目有一个带有子模块的 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

我在这里缺少什么?当然,嵌套工作空间有一种方法可以引用相同的路径,而不会相互干扰。

感谢您的宝贵时间!

【问题讨论】:

  • 一方面,您表明您的项目 A 工作区配置仅引用项目 B。
  • 我不确定我是否理解您的意思。项目 A 引用了项目 A 和项目 B 中的两个文件。项目 B 没有引用项目 A。这说明清楚了吗?

标签: python bazel


【解决方案1】:

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

workspace(name = "projectA")

我已经在 projectB 的 WORKSPACE 文件中找到了该行,但它在 projectA 中被跳过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多