2009-09-24 34 views
19

我已經開始使用Eclipe + PyDev作爲開發我的第一款Google App Engine應用程序的環境。 Eclipse根據this tutorial進行配置。Eclipse + PyDev + GAE memcache錯誤

一切正常,直到我開始使用memcache。 PyDev的報告中的錯誤,我不知道如何解決它:

alt text http://www.freeimagehosting.net/uploads/fc176c0957.png

錯誤:進口未定義的變量:獲得

如何解決這一問題? 當然,這只是PyDev檢查器的問題。代碼是正確的,並在GAE上運行。

UPDATE:

  1. 我使用的PyDev 1.5.0,但遇到了同樣的用1.4.8。
  2. 我PYTHONPATH包括(在項目屬性/組的PyDev - PYTHONPATH):
    • C:\Program Files\Google\google_appengine
    • C:\Program Files\Google\google_appengine\lib\django
    • C:\Program Files\Google\google_appengine\lib\webob
    • C:\Program Files\Google\google_appengine\lib\yaml\lib

更新2:

我看了C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py,發現get()沒有聲明爲memcache模塊功能。他們使用下面的技巧來做到這一點(我沒有聽說過這樣的可能性):

_CLIENT = None 


def setup_client(client_obj): 
    """Sets the Client object instance to use for all module-level methods. 

    Use this method if you want to have customer persistent_id() or 
    persistent_load() functions associated with your client. 

    Args: 
    client_obj: Instance of the memcache.Client object. 
    """ 
    global _CLIENT 
    var_dict = globals() 

    _CLIENT = client_obj 
    var_dict['set_servers'] = _CLIENT.set_servers 
    var_dict['disconnect_all'] = _CLIENT.disconnect_all 
    var_dict['forget_dead_hosts'] = _CLIENT.forget_dead_hosts 
    var_dict['debuglog'] = _CLIENT.debuglog 
    var_dict['get'] = _CLIENT.get 
    var_dict['get_multi'] = _CLIENT.get_multi 
    var_dict['set'] = _CLIENT.set 
    var_dict['set_multi'] = _CLIENT.set_multi 
    var_dict['add'] = _CLIENT.add 
    var_dict['add_multi'] = _CLIENT.add_multi 
    var_dict['replace'] = _CLIENT.replace 
    var_dict['replace_multi'] = _CLIENT.replace_multi 
    var_dict['delete'] = _CLIENT.delete 
    var_dict['delete_multi'] = _CLIENT.delete_multi 
    var_dict['incr'] = _CLIENT.incr 
    var_dict['decr'] = _CLIENT.decr 
    var_dict['flush_all'] = _CLIENT.flush_all 
    var_dict['get_stats'] = _CLIENT.get_stats 


setup_client(Client()) 

嗯......不知道如何強制PyDev的認識是什麼?

+0

同1.4.8?所以它應該是一個PYTHONPATH定義問題。 – VonC

+0

我仍然遇到Eclipse Indigo SR2 + PyDev 2.5(Google App Engine 1.6.6應用程序)和Python 3.2的錯誤。奇怪的事情......在我的情況下,解決方案是在@Richard Green提到的頁面頂部添加'#@ PydevCodeAnalysisIgnore':http://stackoverflow.com/a/2930265/114029 –

回答

3

您使用的是什麼版本的PyDev?最近的一個(1.5)還是Google教程提到的舊的?
請參閱this thread

有一個類似issue with PyROOT

Since PyDEV plugin does not read $HOME/.pystartup , touching functions/ classes is not a solution. Because it analyze the syntax and structures of python modules to be imported not on-the-fly but when I set the PYTHONPATH from Eclipse's preference panel.

所以做你的PYTHONPATH參考谷歌圖書館嗎?


他們可能是在1.5的代碼完成的一個問題這可能會迫使你禁用代碼分析:Pydev 1.5.0 code anlaysis breaks code pyqt4 code completion - ID: 2855598

have pyqt 4.5.4 installed.
Initially I had pydev 1.4.8 the open source version installed and code completion worked fine.
After updating to pydev 1.5.0, pyqt code completion stopped functioning.
After disabling the Pydev code analysis in "eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?", code completion began working again for PyQt classes etc.

+0

我使用PyDev 1.5 .0但與1.4.8相同。 – bocco

4

我有點遲到了,但你可以添加以下在您的所有文件使用內存緩存來選擇性地關閉PyDev的分析評論:

#@PydevCodeAnalysisIgnore

4

如果你不想關閉所有的代碼分析爲您的項目/模塊,然後關閉該線路。This answer解釋說您可以按Ctrl + 1來調出快速修復,並在行尾插入#@UndefinedVariable

25

有一個更清晰的解決方案:嘗試將GAE的內存緩存添加到強制內置。

在你的PyDev-> Interpreter-Python-> ForcedBuiltins窗口中,添加「google.appengine.api.memcache」條目並應用。

雙擊memcache錯誤以檢查它們,它們消失!

請確保系統pythonpath包含谷歌APE安裝目錄。

+2

非常感謝。這個提示需要被投票! – smith324

+2

這也適用於我,謝謝! –

+0

不知道爲什麼,但我不得不從eclipse中刪除項目,並重新導入它爲此工作。 – Ralphz

0

我固定,通過增加這個幾行代碼,我在我的文件的頂部:

from google.appengine.api import memcache 
# work-around for Eclipse+PyDev+GAE memcache error 
if not hasattr(memcache, 'set'): 
    Client=None 
    memcache.setup_client(Client) 
    memcache = Client 

你可以它的CommNet出在量產版。

這只是爲了保持日食快樂並讓代碼完成工作。