我使用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最简单的用例之一。
答案 0 :(得分:0)