终端中的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测试--linkopt”等)。但是有趣的是,无论哪种方式我都得到相同的结果。

这将引发大约10个错误,每个错误的类型均相同,即“试图使已冻结的对象发生变异”,并得出以下结论:测试未运行,错误加载包dragnn / protos,并且无法开始构建。

这是错误的一般形式:


  语法网>> bazel测试--linkopt = -headerpad_max_install_names
  dragnn / ... syntaxnet / ... util / utf8 / ...
  
  。
  
  错误:
  / Users / XXX / Desktop / NLP / syntaxnet / models / research / syntaxnet / dragnn / protos / BUILD:35:1:
  追溯(最近一次通话):文件
  “ / Users / XXX / Desktop / NLP / syntaxnet / models / research / 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 =名称,srcs =
  srcs,srcs_versi ...“,)文件
  “ /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个软件包)错误:无法开始构建。无法运行
  测试


知道该怎么做吗?谢谢。

最佳答案

此错误表示py_proto_library规则实现中的错误。

tf_proto_library_pysyntaxnet.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,以在tf_workspace中更新其Protobuf版本,并
语法网将//research/syntaxnet中的TF子模块引用更新为错误修复的版本。

解决方法是,您可以修补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)


免责声明:这是“盲目”修复;我没有尝试过是否有效。

07-24 09:52