from your_proto_file_pb2 import YourProtoMessage 这个YourProtoMessage无法引用
时间: 2023-08-04 10:04:34 浏览: 45
如果您的Python代码无法引用proto文件中定义的消息类型,可能是因为导入的消息类型名称不正确。请确认您在proto文件中定义的消息类型名称与您在Python代码中导入的名称相同。
例如,如果您在proto文件中定义了一个名为 "YourProtoMessage" 的消息类型,那么您应该在Python代码中使用以下代码导入该消息类型:
```python
from your_proto_file_pb2 import YourProtoMessage
```
如果您的Python代码中使用了正确的导入语句,但仍然无法引用消息类型,请尝试重新生成Python文件。在重新生成Python文件之前,请确保您的proto文件中的消息类型名称与您的Python代码中导入的名称相同。
您可以使用以下命令重新生成Python文件:
```
protoc --python_out=. your_proto_file.proto
```
请将 "your_proto_file.proto" 替换为您自己的proto文件名。完成此操作后,您应该可以在Python代码中正确引用proto文件中定义的消息类型。
相关问题
D:\anaconda\envs\pytorch\python.exe C:\Users\23896\Desktop\bev-lane-det_dachaung-master\tools\train_openlane.py Traceback (most recent call last): File "C:\Users\23896\Desktop\bev-lane-det_dachaung-master\tools\train_openlane.py", line 18, in <module> from torch.utils.tensorboard import SummaryWriter File "D:\anaconda\envs\pytorch\lib\site-packages\torch\utils\tensorboard\__init__.py", line 13, in <module> from .writer import FileWriter, SummaryWriter # noqa: F401 File "D:\anaconda\envs\pytorch\lib\site-packages\torch\utils\tensorboard\writer.py", line 9, in <module> from tensorboard.compat.proto.event_pb2 import SessionLog File "D:\anaconda\envs\pytorch\lib\site-packages\tensorboard\compat\proto\event_pb2.py", line 17, in <module> from tensorboard.compat.proto import summary_pb2 as tensorboard_dot_compat_dot_proto_dot_summary__pb2 File "D:\anaconda\envs\pytorch\lib\site-packages\tensorboard\compat\proto\summary_pb2.py", line 17, in <module> from tensorboard.compat.proto import tensor_pb2 as tensorboard_dot_compat_dot_proto_dot_tensor__pb2 File "D:\anaconda\envs\pytorch\lib\site-packages\tensorboard\compat\proto\tensor_pb2.py", line 16, in <module> from tensorboard.compat.proto import resource_handle_pb2 as tensorboard_dot_compat_dot_proto_dot_resource__handle__pb2 File "D:\anaconda\envs\pytorch\lib\site-packages\tensorboard\compat\proto\resource_handle_pb2.py", line 16, in <module> from tensorboard.compat.proto import tensor_shape_pb2 as tensorboard_dot_compat_dot_proto_dot_tensor__shape__pb2 File "D:\anaconda\envs\pytorch\lib\site-packages\tensorboard\compat\proto\tensor_shape_pb2.py", line 36, in <module> _descriptor.FieldDescriptor( File "D:\anaconda\envs\pytorch\lib\site-packages\google\protobuf\descriptor.py", line 561, in __new__ _message.Message._CheckCalledFromGeneratedFile() TypeError: 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).
这个错误提示表明在导入 `torch.utils.tensorboard` 模块时出现了问题,具体是由于 `google.protobuf` 模块的版本不兼容导致的。错误信息还提到了一些可能的解决方法。
要解决这个问题,你可以尝试以下几个步骤:
1. 首先,尝试升级 `google.protobuf` 模块。可以使用以下命令来升级:
```
pip install --upgrade protobuf
```
2. 如果升级 `google.protobuf` 后问题仍然存在,可以尝试降级 `protobuf` 包的版本。根据错误信息所述,可以尝试将 `protobuf` 降级到 3.20.x 或更低的版本:
```
pip install protobuf==3.20.0
```
3. 如果上述步骤都没有解决问题,可以尝试设置环境变量 `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION` 为 `python`,但这会导致纯Python解析,速度较慢:
```
set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
```
请注意,在尝试这些解决方法之前,请确保你的环境中已经安装了最新版本的 `pip` 和 `setuptools`。
如果问题仍然存在,请提供关于你的环境和依赖项的更多详细信息,以便我能够更好地帮助你解决问题。
TypeError: 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 workaroun
这个错误通常是由于protobuf版本不兼容造成的。出现这个错误的原因是因为你使用的protobuf版本太旧,无法创建描述符。
推荐使用最新版本的protobuf。如果无法立即更新protobuf版本,也可以尝试以下解决方案:
1. 重新生成_pb2.py文件
如果你的protobuf版本较老,可以尝试重新生成_pb2.py文件。可以通过以下命令来生成_pb2.py文件:
```
protoc --python_out=. your_proto_file.proto
```
其中,your_proto_file.proto是你的.proto文件的名称。
2. 使用旧版API
如果你无法更新protobuf版本或重新生成_pb2.py文件,可以尝试使用旧版API。在旧版API中,可以使用Descriptor()方法来创建描述符。
例如,下面是一个使用旧版API的Python代码示例:
```
import person_pb2
person_descriptor = person_pb2.Person.DESCRIPTOR
person_name_descriptor = person_descriptor.fields_by_name["name"]
person_age_descriptor = person_descriptor.fields_by_name["age"]
print(person_descriptor)
print(person_name_descriptor)
print(person_age_descriptor)
```
希望这些解决方案能够帮助你解决这个问题。