2017-09-21 4 views
1

J'essaie de faire this example travail de C, mais chaque fois que j'essaie de construire le programme avec Bazel je reçois ce message d'erreur:Bazel ne trouve pas le paquet tensorflow par exemple le code

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 

J'ai sauvé le code exact source de github dans un répertoire appelé code. J'ai installé tensorflow dans un environnement virtuel (actif) via pip: pip3 install --upgrade tensorflow. J'utilise arch linux.

Pourquoi bazel ne trouve-t-il pas les paquets appropriés? Je suis assez nouveau pour bazel/tensorflow. Où sont enregistrés ces paquets? Dois-je les spécifier explicitement quelque part?

Répondre

3

Généralement, l'extraction d'un sous-dossier d'un projet utilisant Bazel et sa construction séparément ne fonctionne pas.

Si vous regardez dans le fichier BUILD du dossier label_image, vous verrez cette définition pour un C++ binaire:

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", 
     ], 
    }), 
) 

Cette règle indique Bazel ce que le label_image binaire nécessite à construire. Notamment, il a des dépendances (deps) et des options de lien (linkopts) qui pointent vers la racine de l'espace de travail tensorflow (//tensorflow, défini par le fichier WORKSPACE), qui est absent de votre sous-dossier extrait. C'est la raison pour laquelle Bazel se plaint de ne pas trouver le paquet tensorflow.

La méthode la plus simple pour générer le binaire label_image consiste à le générer à partir du projet tensorflow, car les chemins sont déjà configurés.

+0

Je vois, merci. Est-il suffisant de simplement télécharger le projet complet à partir de github, et d'exécuter l'exemple de construction ici, ou dois-je construire quelque chose à l'avance pour le faire fonctionner? – Jonas

+0

Oui, et suivez les étapes supplémentaires spécifiques au Tensorflow dans le fichier README pour télécharger la définition du modèle si ce n'est pas le cas. – Jin