6

I've got a PyDev project that uses protocol buffers. The protocol buffer files are located in a zip file generated by the protoc compiler. Everything works when I run the program, however PyDev reports "Undefined variable from import" for every enumeration constant. So for example:

import model_pb2

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

It reports the enum constant "PARAMETER" as being an undefined variable. There are several dozen similar errors in my program, and I'd like to fix them "properly" (i.e. not simply suppressing the warning.)

4

3 回答 3

1

我发现使用 for builtins as 可以工作,但前提是所有 proto 文件都位于一个单独的外部库中(请参阅http://pydev.org/manual_101_project_conf2.html)。

这应该有效:

  1. 将包括 model_pb2.py 在内的编译后的 proto 文件移动(或解压缩)到 pydev 项目之外的目录中。
  2. 将一个空的 __init__.py 文件添加到与 model_pb2.py 相同的目录中,以确保它可以作为库导入。
  3. 在 Eclipse 中,转到 Windows -> Preferences -> pydev -> Interpreter
  4. 将带有 model_pb2.py 的目录添加到库中。
  5. 将 model_pb2 添加到强制构建。

如果您不沉迷于自动完成功能,则可以使用 ctrl+1 来忽略这些错误,如本答案中所述。这是用 Eclipse Kepler 和 pydev 2.8 测试的。

于 2013-08-13T20:31:28.797 回答
1

我在 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
于 2016-04-07T23:04:28.883 回答
0

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

于 2012-07-02T10:42:14.457 回答