2012-06-30 32 views
6

我有一個使用協議緩衝區的PyDev項目。協議緩衝區文件位於protoc編譯器生成的zip文件中。當我運行程序時一切正常,但是PyDev會爲每個枚舉常量報告「未定義變量來自導入」。舉例來說:在PyDev中使用協議緩衝區時導入的未定義變量

import model_pb2 

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

它報告枚舉常量「PARAMETER」爲未定義的變量。有在我的計劃數十個類似的錯誤,我想解決這些問題「適當」(即不是簡單地抑制警告。)

回答

1

我發現使用內建的as可以工作,但只有當所有proto文件位於外部庫中的一個單獨的位置(請參閱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添加到強制構建中。

如果您沒有沉迷於自動填充,您可以使用Ctrl + 1來忽略這些錯誤as described in this answer。這是用Eclipse Kepler和pydev 2.8測試的。

0

我遇到protobuf的2.6.1和4.5.5的PyDev這個問題。我嘗試了上面的建議,他們都沒有幫助我的情況。當使用protobuf枚舉時,最終擺脫了「未定義的變量」錯誤很簡單:

在實例化的protobuf對象而不是protobuf模塊上訪問enum。

我不知道這是否可以應用到OP的使用情況,但在我的它是那麼容易,因爲:

from myprotobuf_module import SomeProtobufMessage 

some_protobuf_object = SomeProtobufMessage() 
some_enum = some_protobuf_object.SOME_ENUM