MacOS high sierra,MBP 2016,终端。
我按照这里的指示: https://github.com/tensorflow/models/tree/master/research/syntaxnet 选择./configure的所有选项作为默认值(并且所有python目录都经过双重检查。)。所有步骤都干净利落地完成:
bazel test ...
# On Mac, run the following:
bazel test --linkopt=-headerpad_max_install_names \
dragnn/... syntaxnet/... util/utf8/...
我认为我应该运行后一行(“bazel test --linkopt”等)。但无论如何,我都有同样的结果。
这会抛出大约10个错误,每个错误都是“试图改变一个冻结的对象”,并且结论是测试没有运行,错误加载包dragnn / protos,并且无法启动构建。
这是错误的一般形式:
syntaxnet>> bazel test --linkopt = -headerpad_max_install_names dragnn / ... syntaxnet / ... util / utf8 /...
错误: /用户/ XXX /桌面/ NLP / syntaxnet /模型/科研/ syntaxnet / dragnn / PROTOS / BUILD:35:1: Traceback(最近一次调用最后一次):文件 “/用户/ XXX /桌面/ NLP / syntaxnet /模型/科研/ syntaxnet / dragnn / PROTOS / BUILD” 第35行tf_proto_library_py(name =“data_py_pb2”,srcs = [“dat ...”]) 文件 “/Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/syntaxnet/syntaxnet.bzl” 第53行,在tf_proto_library_py py_proto_library(name = name,srcs = srcs,srcs_versi ...“,< 5 more arguments>)文件 “/private/var/tmp/_bazel_XXX/f74e5a21c3ad09aeb110d9de15110035/external/protobuf_archive/protobuf.bzl” 第374行,在py_proto_library py_libs + = [default_runtime]中尝试 变异冻结对象错误:包含错误:dragnn / protos
... [各种'name =“... pb2”'文件]的相同错误......
信息:已用时间:0.709s未成功:构建未成功完成 (已加载17个包)错误:无法启动构建。无法运行 测试
任何想法可以做到这一点?感谢。
答案 0 :(得分:6)
此错误表示py_proto_library
规则实施中存在错误。
tf_proto_library_py
在syntaxnet.bzl
中定义。它是py_proto_library
的包装,由tf_workspace
宏的protobuf_archive
规则定义。
“protobuf_archive”下载Protobuf 3.3.0,其中包含带有//:protobuf.bzl
规则实现的py_proto_library
:在第374行中,它尝试改变不可变对象py_libs
。
确保使用最新的Bazel版,目前为0.8.1。
如果问题仍然存在,那么:
我建议提交错误:
py_proto_library
规则tf_workspace
和//research/syntaxnet
中的TF子模块引用更新为bugfixed版本。作为一种解决方法,也许您可以修补protobuf.bzl
。
补丁是改变这些行:
373 if default_runtime and not default_runtime in py_libs + deps:
374 py_libs += [default_runtime]
375
376 native.py_library(
377 name=name,
378 srcs=outs+py_extra_srcs,
379 deps=py_libs+deps,
380 imports=includes,
381 **kargs)
到这些:
373 if default_runtime and not default_runtime in py_libs + deps:
374 py_libs2 = py_libs + [default_runtime]
375 else:
376 py_libs2 = py_libs
377
378 native.py_library(
379 name=name,
380 srcs=outs+py_extra_srcs,
381 deps=py_libs2+deps,
382 imports=includes,
383 **kargs)
免责声明:这是一个“盲目”修复;我还没有尝试过是否有效。
答案 1 :(得分:0)
Tried same pattern patch for cc_libs.
if default_runtime and not default_runtime in cc_libs:
cc_libs2 = cc_libs + [default_runtime]
else:
cc_libs2 = cc_libs
if use_grpc_plugin:
cc_libs += ["//external:grpc_lib"]
native.cc_library(
name=name,
srcs=gen_srcs,
hdrs=gen_hdrs,
deps=cc_libs2 + deps,
includes=includes,
**kargs)
显示新错误,但会继续编译。 (适用于Linux的Windows系统上的Ubuntu 16 - 请问,本机tensorflow 1.4 winx64有效,但不是syntaxnet)。
greg @ FX11:/ mnt / c / code / models / research / syntaxnet $ bazel test ... 错误:/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/external/org_tensorflow/tensorflow/core/kernels/BUILD:451:1:in _transitive_hdrs rule @ org_tensorflow // tensorflow / core / kernels:bounds_check_lib_gather: Traceback(最近一次调用最后一次): 文件“/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/external/org_tensorflow/tensorflow/core/kernels/BUILD”,第451行 _transitive_hdrs(name ='bounds_check_lib_gather') 在_transitive_hdrs_impl中输入文件“/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/external/org_tensorflow/tensorflow/tensorflow.bzl”,第869行 集()
刚刚将set()更改为depset(),这似乎避免了错误。
答案 2 :(得分:0)
长话短说。我受到了sstrasburg评论的启发。
首先,卸载一个新版本的bazel。
brew uninstall bazel
从here下载bazel 0.5.4。
chmod +x bazel-0.5.4-without-jdk-installer-darwin-x86_64.sh
./bazel-0.5.4-without-jdk-installer-darwin-x86_64.sh
之后,再次运行
bazel test --linkopt=-headerpad_max_install_names dragnn/... syntaxnet/... util/utf8/...
最后,我得到了
在57次测试中执行了57次:57次测试通过。