我正在开发一个需要嵌套工作空间的项目 - 我们的项目有一个带子模块的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
。
我的projectA工作区有如下配置:
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",
]
)
而且tests.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
我在这里缺少什么?当然,嵌套工作区有一种方法可以引用相同的路径而不会相互破坏。
谢谢你的时间!
答案 0 :(得分:0)
当我在工作区文件中为projectA命名时,此问题自行解决:
<select class="form-control from-to-controls" ng-model="pair.from._id" ng-change="selectEndpoint(pair.from,'{{pair.from._id}}')" ng-disabled="autoTest && testRunning || disableAll">
<option value="NEW">New</option>
<option ng-repeat="endpoint in endpoints" value="{{endpoint._id}}" ng-selected="endpoint.name==pair.from.name">{{endpoint.name}}</option>
</select>
<select class="form-control from-to-controls" ng-model="pair.to._id" ng-change="selectEndpoint(pair.to,'{{pair.to._id}}')" ng-disabled="autoTest && testRunning || disableAll">
<option value="NEW">New</option>
<option ng-repeat="endpoint in endpoints" value="{{endpoint._id}}" ng-selected="endpoint.name==pair.to.name">{{endpoint.name}}</option>
</select>
我已经在projectB&#39的WORKSPACE文件中使用了该行,但是它在projectA中被跳过了。