我试图让Protobuf使用Python,但是Python在导入编译后的.proto文件时会抛出一个错误。错误是ModuleNotFoundError:没有名为“google”的模块。
这是一个全新的、干净的Ubuntu实例。协议编译器的安装是通过从发布页面下载预构建的二进制文件,然后按照自述的这里文件中的说明进行安装。命令的完整列表如下所示。编译工作正常,但导入失败。出什么问题了?提前谢谢。
我使用scp将my_file.proto从本地机器复制到EC2实例。然后对实例进行SSH,并:
$ 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
发布于 2022-08-13 19:13:12
您也需要安装protobuf。protoc生成存根,但是Python的Protobuf实现有一个运行时需求,这是由protobuf模块提供的。
使用例如virtualenv来划分Python工作区是个好主意。
python3 -m venv venv
source venv/bin/activate
python3 -m pip install protobuf # Or requirements.txt
python3
import my_file_pb2 # should work当你做完
deactivate您还可能希望将protoc保持在本地:
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发布于 2022-08-13 03:19:55
也许是pip3 install google-api-python-client。
或者pip3 install google,但正如我所看到的,它似乎不适用于许多人,如果它对您有效,那么就很好了。
https://stackoverflow.com/questions/73341336
复制相似问题