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-11-28 17:51:10 浏览: 65
这个错误通常出现在使用旧版本的 protobuf 包时使用新版本的代码生成器时。要解决此问题,可以按照以下步骤之一进行操作:
1. 升级 protobuf 包的版本到 3.19.0 或更高版本。
2. 重新生成代码。可以使用最新版本的 protoc 编译器和 protobuf 代码生成器来生成代码。
3. 降低 protobuf 包的版本到 3.20.x 或更低版本。
4. 设置环境变量 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python,但这会使用纯 Python 解析,速度会变得很慢。
具体的步骤如下:
1. 升级 protobuf 包的版本:
可以使用以下命令升级 protobuf 包:
```
pip install protobuf --upgrade
```
2. 重新生成代码:
可以下载最新版本的 protoc 编译器和 protobuf 代码生成器,然后使用以下命令重新生成代码:
```
protoc --python_out=. your_proto_file.proto
```
3. 降低 protobuf 包的版本:
可以使用以下命令降低 protobuf 包的版本:
```
pip install protobuf==3.20
```
4. 设置环境变量:
可以设置环境变量 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python,以使用纯 Python 解析:
```
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
```
阅读全文