python protobufs - 如何跳过安装步骤?

1 投票
2 回答
2073 浏览
提问于 2025-04-16 09:44

我正在写一个小的Python工具,主要是给一些技术水平不高的用户使用,这个工具需要和一些protobuf(协议缓冲区)进行交互。

理想情况下,我希望在本地使用这个工具的唯一要求就是:

需要安装Python

* have an SVN checkout of the repository
* run a simple bash script to build the local proto .py definitions
* run "python myutility"

不过,我在导入descriptor_pb2.py的时候遇到了一些麻烦。我看到过一个链接,讨论了“为什么在使用Google协议缓冲区时会看到‘无法导入名称descriptor_pb2’的错误”,但我希望能避免增加额外的要求,比如需要先安装proto SDK。

我修改了bash脚本,让它在本地生成descriptor_pb2.py,这样可以处理我其他_pb2.py文件的第一层导入,但看起来descriptor_pb2.py本身又试图去导入descriptor_pb2,结果找不到它:

    $ python myutility.py
Traceback (most recent call last):
  File "myutility.py", line 4, in <module>
    import protos.myProto_pb2
  File "/myPath/protos/myProto_pb2.py", line 8, in <module>
    from google.protobuf import descriptor_pb2
  File "/myPath/google/protobuf/descriptor_pb2.py", line 8, in <module>
    from google.protobuf import descriptor_pb2
ImportError: cannot import name descriptor_pb2

我的本地文件夹结构是这样的:

* myutility.py
* google/
  * protobuf/
    * descriptor.py
    * descriptor_pb2.py
* protos
  * myProto_ob2.py

另外,我还是个Python新手,可能有些明显的地方我没注意到。

谢谢大家,

Orion

2 个回答

0

在google/protobuf这个文件夹里,有没有一个叫__ init __.py的文件呢?

0

把 descriptor_pb2.py 文件里导入 descriptor_pb2.py 的那一行注释掉,解决了我的问题。感谢 tim mcclarren 提出的这个建议!

撰写回答