FileDescriptor依赖项列表

时间:2017-12-14 14:50:24

标签: python python-3.x protocol-buffers

我使用protoc将protobuf模式文件编译为python 3,但在通过__init__.py __all__导入后,我获得了{{1}来自AttributeError对象的dependencies列表。我认为我的情况很直观,但需要冗长的描述。我有一个protobuf架构导入另一个,都在同一个包中。这几乎看起来像一个循环依赖问题,在生成的python文件试图引用它之前模块尚未初始化。

这是我的目录结构,在编译之前:

FileDescriptor

包含company_package \ project_package \ bar.proto # imports foo.proto \ foo.proto \ __init__.py # exposes classes via __all__ \ __init__.py # has extend_path from pkgutil build.sh

build.sh

包含以下内容的独立protoc --python_out=. company_package/project_package/foo.proto protoc --python_out=. company_package/project_package/bar.proto

foo.proto

并且,如上所述,依赖syntax = "proto2"; package company; message Foo { required string msg = 1; } 包含:

bar.proto

syntax = "proto2"; import "company_package/project_package/foo.proto"; package company; message Bar { required Foo foo = 1; } 的{​​{1}}具有通常的__init__.py代码。 company_package的{​​{1}}包含:

pkgutil.extend_path

调用__init__.py后,目录结构为:

project_package

如果我在隔离的虚拟环境中打开REPL并执行以下行,我会收到此错误:

from .foo_pb2 import Foo 
from .bar_pb2 import Bar 


__all__ = ['Foo', 'Bar']

为了记录,我在GitHub上看到了臭名昭着的Protobuf / Python 3问题帖子,我有点确定它不是problem

我的主要问题是:为什么这不起作用?这似乎是protobuf最简单的用例之一。

1 个答案:

答案 0 :(得分:0)

我的问题是我使用的是旧版本的protoc编译器。您可以在GitHub repository上下载最新版本。

以下是我的版本信息,现在问题已解决:

Pooling=False