如何从另一个Python包导入protocol buffer定义?

发布于 2024-09-29 09:03:14 字数 898 浏览 1 评论 0原文

我的目录结构如下:

root/
  sift/
    __init__.py
    sift_descriptors.proto
    sift_descriptors_pb2.py
  project/
    __init__.py
    filtered_descriptors.proto
    filtered_descriptors_pb2.py
    filtered_descriptors_test.py

根目录位于我的 $PYTHONPATH 中。

我使用 protoc --python_out=./ sift_descriptors.proto 构建 root/sift/sift_descriptors_pb2.py

我构建 root/project/filtered_descriptors_pb2.py 使用/cs/public/lib/pkg/protobuf/bin/protoc --proto_path=../sift --proto_path=./ --python_out=./filtered_descriptors.proto

在filtered_descriptors中 .proto,我使用 import "sift_descriptors.proto"

问题是,在 filtered_descriptors_pb2.py (由 protoc 生成)中,有一条语句只执行此操作裸导入:import sift_descriptors_pb2,不通过所需的模块名称进行引用:from sift import sift_descriptors_pb2

我做错了什么?

I have my directory structure like this:

root/
  sift/
    __init__.py
    sift_descriptors.proto
    sift_descriptors_pb2.py
  project/
    __init__.py
    filtered_descriptors.proto
    filtered_descriptors_pb2.py
    filtered_descriptors_test.py

The root directory is in my $PYTHONPATH.

I build root/sift/sift_descriptors_pb2.py using protoc --python_out=./ sift_descriptors.proto

I build root/project/filtered_descriptors_pb2.py using /cs/public/lib/pkg/protobuf/bin/protoc --proto_path=../sift --proto_path=./ --python_out=./ filtered_descriptors.proto

In filtered_descriptors.proto, I use import "sift_descriptors.proto"

The problem is that in filtered_descriptors_pb2.py (produced by protoc), there's a statement that just does this bare import: import sift_descriptors_pb2, without reference via the module name as would be needed: from sift import sift_descriptors_pb2.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

焚却相思 2024-10-06 09:03:14

您不将 .py 添加到导入语句:“from sift import sift_descriptors_pb2”

You don't add .py to the import statement: "from sift import sift_descriptors_pb2"

余生共白头 2024-10-06 09:03:14

我修好了!

解决方案是在 filtered_descriptors.proto 中使用 import "sift/sift_descriptors.proto",然后将 protoc 指向 --proto_path =../ 而不是 --proto_path=../sift

然后,protoc 生成 Python 代码,以 import sift.sift_descriptors_pb2 的形式进行导入。

I fixed it!

The solution was to use import "sift/sift_descriptors.proto" in filtered_descriptors.proto, and then point protoc to --proto_path=../ instead of --proto_path=../sift.

Then, protoc generates python code that does the import as import sift.sift_descriptors_pb2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文