我有一个使用协议缓冲区一个项目的PyDev。 协议缓存文件位于由protoc编译器生成的压缩文件。 一切正常,当我运行该程序,但报告的PyDev“从进口未定义的变量”为每一个枚举常量。 因此,例如:
import model_pb2
value = model_pb2.Expression(type = model_pb2.Expression.PARAMETER)
它报告枚举常量“参数”作为一个未定义的变量。 有在我的计划数十个类似的错误,我想解决这些问题“适当”(即不是简单地抑制警告。)
我发现,使用内建的可以工作,但前提是所有的原文件是位于外部库的独立(见http://pydev.org/manual_101_project_conf2.html )。
这应该工作:
- 移动(或解压缩)编译原文件,包括model_pb2.py到的PyDev项目之外的目录。
- 一个空的__init__.py文件添加到同一个目录model_pb2.py,以确保它可以导入为库。
- 在Eclipse中,转到Windows - >首选项 - >的PyDev - >解释
- 添加目录与model_pb2.py到库。
- 添加model_pb2到强制buildins。
如果你不沉迷于自动完成,你可以使用CTRL + 1忽略这些错误,而不是在这个答案描述 。 这是与Eclipse开普勒和2.8的PyDev测试。
您是否尝试过加入“model_pb2”你被迫内建? 请参阅: http://pydev.org/manual_101_project_conf2.html了解详情。
我遇到的protobuf的2.6.1和4.5.5的PyDev这个问题。 我试过上述建议没有他们两个在我的案件有帮助。 什么结束了使用protobuf的枚举很简单,当摆脱“未定义变量”错误:
访问实例化的protobuf的对象上,而不是在protobuf的模块上的枚举。
我不知道这是否可以应用到OP的使用情况,但在我的它是那么容易,因为:
from myprotobuf_module import SomeProtobufMessage
some_protobuf_object = SomeProtobufMessage()
some_enum = some_protobuf_object.SOME_ENUM