descriptors cannot not be created directly. if this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. if you cannot immediately regenerate your protos, some other possible workarounds are: 1. downgrade the protobuf package to 3.20.x or lower. 2. set protocol_buffers_python_implementation=python (but this will use pure-python parsing and will be much slower).
时间: 2023-05-31 19:19:21 浏览: 149
### 回答1:
描述符不能直接创建。如果此调用来自_pb2.py文件,则生成的代码已过时,必须使用protoc> = 3.19.0重新生成。如果您无法立即重新生成您的协议,则可能的其他解决方法是:1.将protobuf软件包降级到3.20.x或更低版本。2.设置protocol_buffers_python_implementation = python(但这将使用纯Python解析,速度会慢得多)。
### 回答2:
这个错误信息的意思是:不能直接创建描述符。如果这个调用来自_pb2.py文件,那么你生成的代码已经过时了,必须使用protoc >= 3.19.0重新生成。如果你不能立即重新生成你的protos,还有一些其他可能的解决方案: 1. 将protobuf软件包降级到3.20.x或更低版本。 2. 设置protocol_buffers_python_implementation=python(但这将使用纯Python解析,速度会慢很多)。
这个错误的产生通常是因为你的代码在使用过程中产生了版本不兼容的问题。当你在使用旧版本的protobuf软件包时,代码会尝试使用不再支持的方法或函数,从而引发此错误。为了解决这个问题,你需要升级你的protobuf软件包版本,或者重新生成你的代码,使其与新版本的protobuf软件包兼容。
如果你无法立即重新生成你的代码,一些备选解决方案可以帮助你避开这个问题。但这些方法通常会降低代码的性能,所以只应该在必要时使用。降级protobuf软件包可能会导致其他问题,而使用纯Python解析可能会使代码变得非常缓慢。因此,对于这个错误最好的解决方案是升级你的protobuf软件包版本,并重新生成你的代码。
### 回答3:
这段话的意思是,当出现“descriptors cannot not be created directly”错误提示时,可能是由于生成的代码已经过时,需要使用 protoc >= 3.19.0 重新生成代码。如果不能立即重新生成代码,则有两个可能的解决方法:
一是将 protobuf 包降级至版本 3.20.x 或更低;二是通过设置 protocol_buffers_python_implementation=python 来解决,但这会使用纯 Python 解析,速度会很慢。
这个错误提示的背后是由 Google 开发的 Protocol Buffers(简称 protobuf)库的机制导致的。在 protobuf 中,描述符(Descriptor)是一种 Python 类型,用于在运行时分析 protocol buffer 的结构和信息。这个错误提示表明描述符无法直接创建,因此必须使用 protobuf 3.19.0 或更高版本的 protoc 来生成更新的代码。
如果无法立即重新生成代码,可以选择将 protobuf 包降级至版本 3.20.x 或更低,但这可能导致其他问题。另外一个解决方法是设置 protocol_buffers_python_implementation=python,但这会牺牲运行速度,因为它将使用纯 Python 解析 protocol buffer,而不是使用 protobuf 库提供的 C++ 扩展。需要根据具体情况选择合适的解决方法。
阅读全文