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

Flask调用gRPC遇ModuleNotFoundError: No module named 'queue_pb2'求助

解决Flask客户端导入gRPC pb2文件的ModuleNotFoundError问题

问题分析

出现ModuleNotFoundError: No module named 'queue_pb2'的核心原因有三点:

  • microservices/queue未被识别为Python包,缺少必要的__init__.py文件
  • 生成的queue_pb2_grpc.py使用了绝对导入import queue_pb2,但从Flask应用的上下文(根目录下的app.py)无法直接找到该模块
  • Python解释器的sys.path未包含项目根目录,导致无法识别microservices层级的包

解决方案

1. 将microservices/queue转为Python包

在microservices/queue目录下创建空的__init__.py文件,让Python将该目录识别为可导入的包:

Cloud/
|-- app.py
|-- microservices/
    |-- queue/
        |-- __init__.py  # 新增空文件
        |-- protos/
            |-- queue.proto
        |-- queue_pb2.py
        |-- queue_pb2_grpc.py

2. 修正gRPC生成文件的导入语句

打开microservices/queue/queue_pb2_grpc.py,将顶部的导入语句:

import queue_pb2 as queue__pb2

修改为相对导入:

from . import queue_pb2 as queue__pb2

这样同一包内的queue_pb2.py就能被正确识别。

3. 确保项目根目录加入Python路径

在app.py的开头添加以下代码,将项目根目录(Cloud/)加入Python的搜索路径:

import sys
from pathlib import Path

# 将项目根目录添加到sys.path
sys.path.append(str(Path(__file__).parent))

4. 重新生成pb文件(可选,更规范的方式)

如果不想手动修改导入语句,可以在**项目根目录(Cloud/)**下执行以下命令重新生成pb文件,确保生成的导入语句符合包结构:

python -m grpc_tools.protoc -I microservices/queue/protos --python_out=microservices/queue --grpc_python_out=microservices/queue microservices/queue/protos/queue.proto

该命令会自动生成符合包路径的导入语句,无需手动修改。

验证

完成以上步骤后,重新执行flask run,即可解决模块找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:35:02