【问题标题】:Bazel doesn't find tensorflow packages for C++ example codeBazel 没有找到 C++ 示例代码的 tensorflow 包
【发布时间】:2018-03-03 07:39:55
【问题描述】:

我尝试让this example 工作,但每次我尝试使用 bazel 构建程序时都会收到以下错误消息:

bazel build //code:label_image 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'.
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'.
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'.
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'.
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'.
ERROR: Analysis of target '//code:label_image' failed; build aborted.
INFO: Elapsed time: 1.261s

我将来自 github 的确切源代码保存在名为 code 的目录中。我通过 pip 在(活动)虚拟环境中安装了tensorflowpip3 install --upgrade tensorflow。我用的是arch linux。

为什么 bazel 找不到合适的包?我对 bazel/tensorflow 很陌生。这些包保存在哪里?我必须在某处明确指定它们吗?

【问题讨论】:

    标签: linux tensorflow packages bazel arch


    【解决方案1】:

    通常,从使用 Bazel 的项目中提取子文件夹并单独构建它是行不通的。

    如果您查看 label_image 文件夹的 BUILD 文件,您将看到 C++ 二进制文件的以下定义:

    cc_binary(
        name = "label_image",
        srcs = [
            "main.cc",
        ],
        linkopts = select({
            "//tensorflow:android": [
                "-pie",
                "-landroid",
                "-ljnigraphics",
                "-llog",
                "-lm",
                "-z defs",
                "-s",
                "-Wl,--exclude-libs,ALL",
            ],
            "//conditions:default": ["-lm"],
        }),
        deps = select({
            "//tensorflow:android": [
                # cc:cc_ops is used to include image ops (for label_image)
                # Jpg, gif, and png related code won't be included
                "//tensorflow/cc:cc_ops",
                "//tensorflow/core:android_tensorflow_lib",
                # cc:android_tensorflow_image_op is for including jpeg/gif/png
                # decoder to enable real-image evaluation on Android
                "//tensorflow/core/kernels:android_tensorflow_image_op",
            ],
            "//conditions:default": [
                "//tensorflow/cc:cc_ops",
                "//tensorflow/core:core_cpu",
                "//tensorflow/core:framework",
                "//tensorflow/core:framework_internal",
                "//tensorflow/core:lib",
                "//tensorflow/core:protos_all_cc",
                "//tensorflow/core:tensorflow",
            ],
        }),
    )
    

    这条规则告诉 Bazel 需要构建 label_image 二进制文件。值得注意的是,它具有依赖项 (deps) 和链接选项 (linkopts),它们指向 tensorflow 工作空间的根目录(//tensorflow,由 WORKSPACE 文件定义),您提取的子文件夹中缺少这些选项。这就是 Bazel 抱怨找不到包tensorflow 的原因。

    构建label_image 二进制文件的最简单方法是从 tensorflow 项目中构建它,因为路径已经设置好了。

    【讨论】:

    • 我明白了,谢谢。从 github 下载完整的项目,并在其中运行示例构建是否足够,还是我需要提前构建一些东西才能使其工作?
    • 是的,如果您还没有,请按照 README 中特定于 Tensorflow 的附加步骤下载模型定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2021-08-06
    相关资源
    最近更新 更多