【发布时间】: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.py 和 projectB/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。这说明清楚了吗?