从外部模块调用时 Grpc 模块未发现错误:没有名为 'recommendations_pb2' 的模块



我想创建一个grpc项目,代码请检查此链接:https://gitee.com/wen2204/test/tree/master.
当我运行模块recommendations.py时,它可以成功运行,不会出现错误
但是,当我想通过recommendations.serve((从Main.py调用模块recommendations.py时,会出现错误:recommendances.py",第7行,在来自推荐_pb2导入(ModuleNotFoundError:没有名为"recommendations_pb2"的模块这很奇怪,grpc代码似乎不能留在子包中。因此你不能调用它。

文件夹结构:

  1. protobufs[文件夹]
    推荐.proto
  2. 推荐[文件夹]
    推荐_pb2_grpc.py
    建议_pb2.py
    推荐.py
  3. Main.py

推荐。py [排除此文件即可]

from concurrent import futures
import random
import time
import grpc
from recommendations_pb2 import (
BookCategory,
BookRecommendation,
RecommendationResponse,
)
import recommendations_pb2_grpc
books_by_category = {
BookCategory.MYSTERY: [
BookRecommendation(id=1, title="The Maltese Falcon"),
BookRecommendation(id=2, title="Murder on the Orient Express"),
BookRecommendation(id=3, title="The Hound of the Baskervilles"),
],
BookCategory.SCIENCE_FICTION: [
BookRecommendation(
id=4, title="The Hitchhiker's Guide to the Galaxy"
),
BookRecommendation(id=5, title="Ender's Game"),
BookRecommendation(id=6, title="The Dune Chronicles"),
],
BookCategory.SELF_HELP: [
BookRecommendation(
id=7, title="The 7 Habits of Highly Effective People"
),
BookRecommendation(
id=8, title="How to Win Friends and Influence People"
),
BookRecommendation(id=9, title="Man's Search for Meaning"),
],
}
class RecommendationService(
recommendations_pb2_grpc.RecommendationsServicer
):
def Recommend(self, request, context):
if request.category not in books_by_category:
context.abort(grpc.StatusCode.NOT_FOUND, "Category not found")
books_for_category = books_by_category[request.category]
num_results = min(request.max_results, len(books_for_category))
books_to_recommend = random.sample(
books_for_category, num_results
)
return RecommendationResponse(recommendations=books_to_recommend)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
recommendations_pb2_grpc.add_RecommendationsServicer_to_server(
RecommendationService(), server
)
server.add_insecure_port("[::]:50051")
server.start()
print('The server has started.....................')
server.wait_for_termination()
if __name__ == "__main__":
serve()

Main.py[从此文件中执行将抛出错误]

import recommendations.recommendations as recommendations
recommendations.serve()

好的,目前,我必须将这些文件保存在同一级别的目录中。那么就不会出现错误
--目录.推荐_pb2_grpc.py
--推荐_pb2.py
--推荐.py
--主.py

最新更新