我对协议缓冲区和Python比较陌生,所以我偶然发现了下面描述的问题。 (我在这个问题上做了很多研究,但没有找到解决方案)
我的代码的相关层次结构:
.
└── MainFolder
├── main.py
├── create_python_proto.bat
├── protos
│ └── foo.proto
├── client
│ ├── protos
│ │ ├ __init__.py
│ │ ├ foo_pb2.py
│ │ └ foo_pb2_grpc.py
│ ├── __init__.py
│ ├── client.py
│ └── etc...
└── server
├── ...
(main.py是我的起点)
当我使用 protoc 从 protobuf 创建代码时,文件按照我想要的方式正确放置。 但是我的“foo_pb2_grpc.py”内部自动生成的代码不正确,正是“foo_pb2.py”的导入。
实际状态:
from protos import foo_pb2 as protos_dot_foo__pb2
目标状态:
from ..protos import foo_pb2 as protos_dot_foo__pb2
我通过“create_python_proto.bat”创建原型文件,命令如下:
setlocal
python -m grpc_tools.protoc -I . --python_out=.\client --grpc_python_out=.\client protos\foo.proto
endlocal
因此,当我从“main.py”运行程序时,我在“foo_pb2_grpc.py”处收到“ImportError”,其中显示:
“无法从‘protos’(未知位置)导入名称‘foo_pb2’”
我做错了什么?我正在拼命寻找解决方案,但我就是找不到......
感谢您提前帮助我!
ps: '.\MainFolde 中给出了'_ _ init _ _.py'