tensorflow:"试图改变一个冻结的物体",bazel

sst*_*urg 1 python macos bazel tensorflow

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/...
Run Code Online (Sandbox Code Playgroud)

我假设我应该运行后一行("bazel test --linkopt"等).但有趣的是,我得到了相同的结果.

这会抛出大约10个错误,每个错误都是"试图改变一个冻结的对象",并且结束了测试没有运行,错误加载包dragnn/protos,并且无法启动构建.

这是错误的一般形式:

syntaxnet >> bazel test --linkopt = -headerpad_max_install_names dragnn/... syntaxnet/... util/utf8/...

.

错误:/ Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/dragnn/protos/BUILD:35:1:Traceback(最近一次调用最后一次):文件"/ Users/XXX/Desktop/NLP/syntaxnet /车型/科研/ syntaxnet/dragnn/PROTOS/BUILD "35行tf_proto_library_py(NAME = "data_py_pb2",SRCS = "数据..."])文件"/用户/ XXX /桌面/ NLP/syntaxnet /模型/研究/syntaxnet/syntaxnet/syntaxnet.bzl "第53行,在tf_proto_library_py py_proto_library(名称=名,SRCS = SRCS,srcs_versi ...",<5个更多的参数>)文件"/私人/ var/tmp中/ _bazel_XXX/f74e5a21c3ad09aeb110d9de15110035 /外部/ protobuf_archive/protobuf.bzl",线路374,在py_proto_library py_libs + = [default_runtime]试图变异冻结对象ERROR:包包含错误:dragnn/PROTOS


... [各种'name ="... pb2"'文件]的错误相同...

信息:经过的时间:0.709s失败:构建未成功完成(加载了17个包)错误:无法启动构建.无法运行测试

知道可以做什么吗?谢谢.

Lás*_*zló 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.

如果问题仍然存在,那么:

  • 我建议提交一个错误:

    • Protobuf,修复py_proto_library规则
    • TensorFlow,更新他们的Protobuf版本tf_workspace,和
    • 语法网将TF子模块引用更新//research/syntaxnet为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)
Run Code Online (Sandbox Code Playgroud)

这些:

   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)
Run Code Online (Sandbox Code Playgroud)

免责声明:这是一个"盲目"修复; 我还没有尝试过是否有效.