我的目录结构如下:
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
。
我使用root/sift/sift_descriptors_pb2.py
protoc --python_out=./ sift_descriptors.proto
我使用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
,而不需要通过模块名称引用:{{1} }。
我做错了什么?
答案 0 :(得分:1)
你没有在import语句中添加.py:“来自sift import sift_descriptors_pb2”
答案 1 :(得分:1)
我修好了!
解决方案是在import "sift/sift_descriptors.proto"
中使用filtered_descriptors.proto
,然后将protoc
指向--proto_path=../
而不是--proto_path=../sift
。
然后,protoc生成以import sift.sift_descriptors_pb2
进行导入的python代码。