在PyDev中使用协议缓冲区时导入的未定义变量

时间:2012-06-30 22:09:36

标签: python eclipse pydev protocol-buffers

我有一个使用协议缓冲区的PyDev项目。协议缓冲区文件位于protoc编译器生成的zip文件中。当我运行程序时,一切都有效,但是PyDev会为每个枚举常量报告“导入的未定义变量”。例如:

import model_pb2

value = model_pb2.Expression(type = model_pb2.Expression.PARAMETER)

它将枚举常量“PARAMETER”报告为未定义的变量。我的程序中有几十个类似的错误,我想“正确”修复它们(即不是简单地抑制警告。)

3 个答案:

答案 0 :(得分:1)

我发现使用内置函数可以正常工作,但前提是所有原型文件都位于外部库中(见http://pydev.org/manual_101_project_conf2.html)。

这应该有效:

  1. 将编译好的原型文件(包括model_pb2.py)移动(或解压缩)到pydev项目之外的目录中。
  2. 将空__init__.py文件添加到与model_pb2.py相同的目录中,以确保它可以作为库导入。
  3. 在eclipse中,转到Windows - >偏好 - > pydev - >解释
  4. 将带有model_pb2.py的目录添加到库中。
  5. 将model_pb2添加到强制构建。
  6. 如果您没有沉迷于自动填充,则可以使用ctrl + 1来忽略这些错误as described in this answer。这是使用Eclipse Kepler和pydev 2.8测试的。

答案 1 :(得分:0)

您是否尝试将“model_pb2”添加到强制内置组件中?有关详细信息,请参阅:http://pydev.org/manual_101_project_conf2.html

答案 2 :(得分:0)

我在protobuf 2.6.1和PyDev 4.5.5中遇到过这个问题。我尝试了上面的建议,在我的案例中没有一个帮助。什么最终摆脱了未定义的变量'使用protobuf枚举时的错误很简单:

访问实例化的protobuf对象上的枚举,而不是protobuf模块。

我不确定这是否适用于OP的用例,但在我的用例中它很简单:

from myprotobuf_module import SomeProtobufMessage

some_protobuf_object = SomeProtobufMessage()
some_enum = some_protobuf_object.SOME_ENUM