2015-11-24 3 views
3

Поскольку у меня нет доступа root на моей машине, я создал и установил swig из источника в нестандартном каталоге (/scratch/swig/build), и я хочу, чтобы bazel его использовал. Так что, когда я пытаюсь построить tensorflow, я получаю ошибку, что SWIG не может быть найден:Bazel: используйте swig из нестандартного местоположения

INFO: Found 1 target... 
INFO: From SWIGing tensorflow/python/tensorflow.i: 
bazel-out/host/bin/tensorflow/swig: line 17: swig: command not found 

Проверка swig сценарий упоминается в сообщении об ошибке, это просто скрипт, который делает:

#!/bin/bash 
swig "[email protected]" 

Печать $PATH из этого сценария показывает это:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:. 

Я не могу добавить переменную $ PATH в Swig сценарий, потому что он получает переделал на сборке. Итак, как я могу сказать, что использовать мое нестандартное местоположение swig?

ответ

2

Это не Базэл конкретных, это часть кода tensorflow:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/swig/swig.sh

Вы можете просто изменить этот файл, прежде чем строить.

Конкретное правило сборки, который использует этот файл также определяется tensorflow, так как это не правило, входит в состав основного распределения Базэл:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tensorflow.bzl#L275

+0

Я модифицировал 'swig.sh', и теперь я получаю' bazel-out/host/bin/tensorflow/swig: строка 3:/scratch/package/install/bin/swig: Нет такого файла или каталога'. Я получил свинг-дир, выполнив «какой swig». Если я заменил swig.sh на двоичный файл swig, я получаю сообщение об ошибке «swig.swg» и 'python.swg' –

+0

Как вы изменили' swig.sh'? – Amber

+0

Я изменил его на: '/ scratch/package/install/bin/swig" $ @ "'. После этого я добавил некоторые сценарии 'ls' в скрипт, и кажется, что bazel не может видеть этот каталог (он может видеть только несколько ограниченного количества каталогов и файлов внутри них). –

2

Эта проблема выглядит, как это связано с Bazel Sandboxing.

Если это так, то, используя следующие Bazel варианты должны обойти эту проблему, так как она поворачивает Песочница от:

--spawn_strategy=standalone --genrule_strategy=standalone 

Я не проверял это, хотя.

Это blog post объясняет:

Песочница является метод ограничения прав доступа к процесса. В контексте Bazel мы в основном обеспокоены ограничением доступа файловой системы к . Более конкретно, файловая система Bazel's содержит только известные входы, так что компиляторы и другие инструменты даже не могут видеть файлы, к которым у них нет доступа.

Как это работает на Linux:

В Linux, мы используем пространство имен пользователей, которые доступны в Linux 3.8 и более поздних версий. В частности, мы создаем новое пространство имен mount. Мы создаем временную директорию, в которую мы монтируем все файлы, которые разрешено просматривать подпроцессом. Затем мы используем pivot_root, чтобы временный каталог отображался как корневой каталог для всех подпроцессов.

Мы также монтируем/proc,/dev/null,/dev/zero и временную файловую систему (tmpfs) on/tmp. Мы монтируем/dev/random и/dev/urandom, но рекомендуем против их использования, так как это может привести к невоспроизводимым сборкам.

В настоящее время мы также монтируем/bin,/etc,/usr (except/usr/local) и каждый каталог, начинающийся с/lib, чтобы запускать локальные инструменты. В будущем мы планируем предоставить оболочку с набором утилит Linux и потребовать, чтобы все остальные инструменты были указаны как входы .

Bazel's roadmap говорит, что песочницы на MacOSX запланирован на апрель 2016 года

Песочница должна быть хорошей вещью, так как она гарантирует, что строить правила согласуются (как и любая зависимость, которая не является явным будет бомбить). Поэтому, возможно, вместо того, чтобы отключать Sandboxing, лучшие решения будут следующими:

  • Фиксирование правил построения TensorFlow, чтобы сделать зависимость от swig явной.
  • или сделать swig доступным в одной из каталогов выше (например, /bin).
  • или явно настроить Bazel для установки каталога, в котором живет swig (если возможно, с -M и -m, я еще не тестировал).

Надеюсь, это поможет.

+0

Спасибо за понимание. Я исправил это, получив sysadmin для установки swig на моей машине. –

+0

@Jonno_FTW О, хорошо, звучит хорошо. Мне было бы интересно узнать, работает ли мой ответ. Мы просто должны ждать, пока у кого-то еще будет такая же проблема. Ура! – MiniQuark

 Смежные вопросы

  • Нет связанных вопросов^_^