You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从外部模块调用GRPC服务时出现ModuleNotFoundError:找不到recommendations_pb2

解决GRPC子包导入ModuleNotFoundError问题

问题根源

直接运行recommendations.py时,Python会将该文件所在目录添加到sys.path,因此能找到同目录下的recommendations_pb2.py;但从Main.py导入子包调用时,recommendations作为Python包被加载,原文件中的绝对导入会从项目根目录开始查找,导致找不到同包内的模块。

修复步骤

1. 确保子包结构合法

在recommendations文件夹下创建__init__.py(空文件即可),让Python识别它为合法的包:

recommendations/
├── __init__.py
├── recommendations_pb2.py
├── recommendations_pb2_grpc.py
└── recommendations.py

2. 修改模块内的导入语句

打开recommendations.py,将原来的绝对导入改为相对导入:

# 替换原有的 import recommendations_pb2 语句
from . import recommendations_pb2 as recommendations__pb2
from . import recommendations_pb2_grpc as recommendations__pb2_grpc

同时检查recommendations_pb2_grpc.py,如果里面有导入recommendations_pb2的语句,同样改为相对导入:

from . import recommendations_pb2 as recommendations__pb2

3. 规范生成GRPC代码(可选但推荐)

重新生成pb文件时,在项目根目录运行以下命令,让生成的代码自动适配包结构:

python -m grpc_tools.protoc -I./protobufs --python_out=./recommendations --grpc_python_out=./recommendations ./protobufs/recommendations.proto

这样生成的文件会自动使用正确的相对导入,无需手动修改。

4. 验证Main.py的导入逻辑

确保Main.py中的导入和调用方式正确:

from recommendations.recommendations import serve

if __name__ == "__main__":
    serve()

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:10:49