bazel/tensorflow 安装错误“外部:io_bazel_rules_closure:'http_archive' 规则中没有这样的属性 'urls'。”

error in bazel/ tensorflow installation 'external:io_bazel_rules_closure: no such attribute 'urls' in 'http_archive' rule.'

大家好,我正在尝试使用本指南“guide 1" and guide 2 在 ubuntu pc (cuda 8) 上安装具有 GPU 兼容性的张量流。我一直在安装 tensorflow, 当我使用 ./configure 时,出现此错误

ERROR: /home/krishna/tensorflow/WORKSPACE:3:1: //external:io_bazel_rules_closure: no such attribute 'urls' in 'http_archive' rule.
ERROR: /home/krishna/tensorflow/WORKSPACE:3:1: //external:io_bazel_rules_closure: missing value for mandatory attribute 'url' in 'http_archive' rule.
ERROR: com.google.devtools.build.lib.packages.BuildFileContainsErrorsException: error loading package '': Encountered error while reading extension file 'closure/defs.bzl': no such package '@io_bazel_rules_closure//closure': error loading package 'external': Could not load //external package.

我是ubuntu的新手,看了很多书才明白,错误与“version of bazel”有关(0.3.1以上的版本不适用)。 当我使用命令

$bazel version

Build label: 0.3.0
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Jun 10 11:38:23 2016 (1465558703)
Build timestamp: 1465558703
Build timestamp as int: 1465558703

当我使用

$ sudo apt-get install bazel
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    bazel is already the newest version (0.4.5).
    0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

和 使用 $ sudo apt-get upgrade bazel 对其进行了升级。最后我尝试了

$ bazel version
Build label: 0.3.0
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Jun 10 11:38:23 2016 (1465558703)
Build timestamp: 1465558703
Build timestamp as int: 1465558703

这表明我的版本是 0.3.0。我什至尝试再次编译 tensorflow,这给了我同样的上述错误。

您的系统上似乎有两个版本的 Bazel(0.3.0 和 0.4.5)。你可以通过 运行ning which bazel 查看当前二进制文件是什么。您可以通过 运行ning:

找到系统上的所有 bazels
$ updatedb  # This will take a while.
$ slocate bazel

假设这 returns 类似于:

/etc/bazel/bin/bazel
/usr/bin/bazel

你可以通过 运行ning /usr/bin/bazel versionslocate 找到的每个 bazel 来找出哪个 bazel 是 "right" 一个 (0.4.5)。

找到合适的 bazel 后,您希望它成为默认值,因此您必须确保 Linux 首先在该目录中搜索 Bazel。如果右边框是 /usr/local/bin/bazel,你会 运行:

$ export PATH="/usr/local/bin:$PATH"

然后你应该可以正常调用 "bazel" 并且你的系统会找到 "right" 一个(你也可以删除你找到的任何旧的)。

或者,您可以使用 the installer 安装 Bazel,它会告诉您它安装在哪个目录中。