在Python中,是否有可能在运行时将Google Protocol Buffers .proto
文件转换为读取该数据的python类? Python是一种非常动态的语言。当您使用protoc
将.proto
文件转换为python源代码时,生成的代码会大量使用python元类,因此它已经非常动态。
理想情况下,我正在考虑这样的事情:
import whatever
module = whatever.load_from_file("myfile.proto")
这可能吗?
(我是协议缓冲区的新手,如果我的问题毫无意义,请告诉我)
答案 0 :(得分:7)
理论上,所有的部分都是为了使这项工作成功。 Python protobuf实现可以调用C ++ .proto
解析器库(libprotoc
)作为C扩展来获取描述符,然后可以将它们提供给元类。
然而,据我所知,没有人完全把它捆绑在一起。 (免责声明:我的知识已经有几年了,我可能错过了一个新的开发,但我在文档中没有看到任何内容。)
顺便说一下,Cap'n Proto的Python实现确实做了你所描述的,证明它是可能的。但如果您需要使用Protobuf格式,这对您没有帮助。
(披露:我是Google开源Protobuf代码的大部分作者,我也是Cap'n Proto的作者。)
答案 1 :(得分:1)
此问题最优雅的解决方案是使用 init .py。请参阅:What is __init__.py for?
您可以调用脚本在 init .py中生成Python protobuf类。导入后,将自动调用该脚本以生成Python protobuf类。