首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Protobuf错误: ModuleNotFoundError:没有名为“google”的模块

问Protobuf错误: ModuleNotFoundError:没有名为“google”的模块
EN

Stack Overflow用户
提问于 2022-08-13 03:15:43
回答 2查看 371关注 0票数 0

我试图让Protobuf使用Python,但是Python在导入编译后的.proto文件时会抛出一个错误。错误是ModuleNotFoundError:没有名为“google”的模块。

这是一个全新的、干净的Ubuntu实例。协议编译器的安装是通过从发布页面下载预构建的二进制文件,然后按照自述的这里文件中的说明进行安装。命令的完整列表如下所示。编译工作正常,但导入失败。出什么问题了?提前谢谢。

我使用scp将my_file.proto从本地机器复制到EC2实例。然后对实例进行SSH,并:

代码语言:javascript
复制
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v21.5/protoc-21.5-linux-x86_64.zip
$ sudo apt install unzip
$ unzip protoc-21.5-linux-x86_64.zip
$ sudo cp bin/protoc /usr/local/bin/.
$ protoc                                      (to test that protoc works)
$ sudo cp -R include/google/ /usr/local/include/.
$ ls /usr/local/include/google/protobuf       (to confirm that the copy worked)
$ export SRC_DIR=/home/ubuntu
$ export DST_DIR=/home/ubuntu
$ protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/my_file.proto    (works)
$ python3
import my_file_pb2    (fails)

导入失败的"ModuleNotFoundError: No模块名为'google'“

$ which python3返回/usr/bin/python3

EN

回答 2

Stack Overflow用户

发布于 2022-08-13 19:13:12

您也需要安装protobuf。protoc生成存根,但是Python的Protobuf实现有一个运行时需求,这是由protobuf模块提供的。

使用例如virtualenv来划分Python工作区是个好主意。

代码语言:javascript
复制
python3 -m venv venv
source venv/bin/activate

python3 -m pip install protobuf # Or requirements.txt
python3
import my_file_pb2 # should work

当你做完

代码语言:javascript
复制
deactivate

您还可能希望将protoc保持在本地:

代码语言:javascript
复制
unzip protoc-21.5-linux-x86_64.zip -d ${SRC_DIR}/protoc-21.5-linux-x86_64
PATH=${PATH}:${SRC_DIR}/protoc-21.5-linux-x86_64/bin
protoc
票数 1
EN

Stack Overflow用户

发布于 2022-08-13 03:19:55

也许是pip3 install google-api-python-client。

或者pip3 install google,但正如我所看到的,它似乎不适用于许多人,如果它对您有效,那么就很好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73341336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档