当我尝试生成protobuf文件时,出现了ModuleNotFoundError错误。

5

当我尝试使用以下命令生成文件时:

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

我遇到了错误。

Traceback:
test_client.py:11: in <module>
    from tests.remote.grpc_wrapper.service_pb2_grpc import TestServiceServicer, add_TestServiceServicer_to_server, \
service_pb2_grpc.py:4: in <module>
    import service_pb2 as service__pb2
E   ModuleNotFoundError: No module named 'service_pb2'

我该怎么解决这个问题?我尝试重新安装protobuf,但没有帮助。

pip uninstall protobuf
pip install -U protobuf

顺便说一句,我使用conda,我试图使用

conda install protobuf

但是它对我没有帮助。

输入图像描述


你的错误在这里 service_pb2,没有模块。请安装它。 - sahasrara62
@prashantrana,“service_pb2”是OP的文件名,不是库。@user45245,您正在尝试从哪个文件夹运行Python命令“python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. service.proto”? - Soumendra
(venv) C:\Users\Valentin\PycharmProjects\protoactor-python\tests\remote\grpc_wrapper>python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. service.proto - user45245
我找到了一个解决方案。例如在_pb2_grpc.py文件中使用"from . import",如 from . import service_pb2 as service__pb2 - user45245
1个回答

9

有人提议在此问题中在.proto文件的生成点指定此内容。据我所知,您目前有两个选项:

1)将第4行更改为在前面添加.(这表示相对导入):

from . import service_pb2 as service__pb2

2)更改“grpc_wrapper”文件夹中的__init__.py文件,以包括:

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

1
以下是一个用于替换包名的Shell命令 - $target - 并使用正确的语法(例如在GitHub Action中): find $REPOPATH/$reponame/ -type f -name "*.py" -print0 | xargs -0 sed -i -e 's, import '"$target"'_pb2, from . import '"$target"'_pb2, g' - joshp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接