tensorflow:“试图改变一个冻结的物体”,baz

2024-09-30 01:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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/...

.

ERROR: /Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/dragnn/protos/BUILD:35:1: Traceback (most recent call last): File "/Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/dragnn/protos/BUILD", line 35 tf_proto_library_py(name = "data_py_pb2", srcs = ["dat..."]) File "/Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/syntaxnet/syntaxnet.bzl", line 53, in tf_proto_library_py py_proto_library(name = name, srcs = srcs, srcs_versi...", <5 more arguments>) File "/private/var/tmp/_bazel_XXX/f74e5a21c3ad09aeb110d9de15110035/external/protobuf_archive/protobuf.bzl", line 374, in py_proto_library py_libs += [default_runtime] trying to mutate a frozen object ERROR: package contains errors: dragnn/protos


。。。[各种'name=“…pb2”'文件的相同错误]。。。在

INFO: Elapsed time: 0.709s FAILED: Build did NOT complete successfully (17 packages loaded) ERROR: Couldn't start the build. Unable to run tests

你知道这是怎么回事吗?谢谢。在


Tags: namepytestmodels错误librarybazelxxx
3条回答

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

tf_proto_library_py^{}中定义。它是^{}的包装,由^{}宏的^{}规则定义。在

“protobuf\\u archive”下载protobuf3.3.0,其中包含//:protobuf.bzl和错误的py_proto_library规则实现:在第374行中,它试图改变一个不可变的对象py_libs。在

确保使用最新的Bazel版本,目前是0.8.1。在

如果问题仍然存在,则:

  • 我建议将bug归档到:

    • Protobuf,修复py_proto_library规则
    • tf_workspace中更新他们的Protobuf版本,并且
    • 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)

致:

^{pr2}$

免责声明:这是一个“盲目”修复;我还没有尝试它是否有效。在

长话短说。我受到了a sstrasburg的评论的启发。在

首先,卸载bazel的新版本。在

brew uninstall bazel

here下载Bazel0.5.4。在

^{pr2}$

之后,再跑一次

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

最后,我得到了

Executed 57 out of 57 tests: 57 tests pass.

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系统上的Ubuntu16不要问,原生tensorflow 1.4Winx64可以工作,但syntaxnet不行)。在

在格雷格@FX11:/mnt/c/code/models/research/syntaxnet$bazel测试。。。 错误:/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbee59ec2/external/org_tensorflow/tensorflow/core/kernels/建筑:451:1:在“传递性”hdrs rule@org_tensorflow//tensorflow/core中/内核:边界检查: 回溯(最近一次呼叫): File“/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbee59ec2/external/org_tensorflow/tensorflow/core/kernels/BUILD”,第451行 _可传递的\u hdrs(名称='边界检查\库收集') File“/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbee59ec2/external/org_tensorflow/tensorflow/tensorflow.bzl“,第869行,可传递的 设置()

刚刚将set()更改为depset(),这似乎避免了错误。在

相关问题 更多 >

    热门问题