终端中的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_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,以在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)
免责声明:这是“盲目”修复;我没有尝试过是否有效。