运行 Skylark 宏中的 load()

Running load() within Skylark macro

如果您的项目依赖于 TensorFlow,建议您添加...

load("//tensorflow:workspace.bzl", "tf_workspace") tf_workspace()

...到您的 WORKSPACE 文件,该文件将加载 TF 的所有依赖项。

但是,如果您查看 TensorFlow 的 workspace.bzl 文件... https://github.com/tensorflow/tensorflow/blob/master/tensorflow/workspace.bzl

您可以看到它取决于 @io_bazel_rules_closure 中的规则。这意味着您还必须在 WORKSPACE 文件中定义此 @io_bazel_rules_closure 规则并使其与 TensorFlow 保持同步,即使您在项目的其他任何地方都不需要它。

有没有办法将 load() 命令 somehow/somewhere 添加到 tf_workspace() 宏中?

谢谢!

不行,没办法在tf_workspace()中添加这条规则,因为在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/workspace.bzl中定义的skylark规则tf_workspace()需要加载@io_bazel_rules_closure.

基本上有两种方法可以做到这一点

  • 要么是tensorflow项目重新定义了规则,只使用内部规则,要么是原生规则。

  • 或 bazel 能够加载依赖项的工作空间(我假设也加载所有传递依赖项)。这是一个难题,在 #1943.

  • 中进行了跟踪