我必须为一些Python应用程序编写RPC服务。我有一个名为solver.proto
的IDL文件,并使用grpcio-tools
模块从中生成了一些代码。以下是生成的项目结构:
solver-service
├── main.py
└── protos/
├── __init__.py
├── __pycache__
│ └── ...
├── generate_pb.py
├── solver.proto
├── solver_pb2.py
└── solver_pb2_grpc.py
我将PYTHONPATH设置为/abs/path/to/solver-service
,我尝试从此目录导入自动生成的gRPC类,但命中如下:
solver-service$ python3
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import protos.solver_pb2
>>> import protos.solver_pb2_grpc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/abs/path/to/solver-service/protos/solver_pb2_grpc.py", line 4, in <module>
import solver_pb2 as solver__pb2
ImportError: No module named 'solver_pb2'
因此,无论出于何种原因,我都可以成功导入protos.solver_pb2
但由于某些相对路径问题,解释器会抱怨导入protos.solver_pb2_grpc
。调用所有执行gRPC的Python开发人员 - 我如何使其工作?
答案 0 :(得分:0)
我知道这很旧,但是通常您必须在导入from .
文件之前添加_grpc.py
。 resolver_pb2_grpc导入了solver_pb2,但是由于某些原因,PYTHONPATH不会检查在python中导出原型的目录。