嵌套工作区问题:具有相同名称的包似乎会被覆盖?

时间:2017-04-29 14:56:14

标签: python bazel

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

我的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

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

谢谢你的时间!

1 个答案:

答案 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中被跳过了。