我已经开始使用Eclipe + PyDev作为开发我的第一个Google App Engine应用程序的环境。 Eclipse是根据this tutorial配置的。
一切正常,直到我开始使用memcache。 PyDev报告错误,我不知道如何解决它:
错误:导入的未定义变量:get
如何解决这个问题? 当然,这只是PyDev检查器的问题。代码是正确的,并在GAE上运行。
更新:
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 :(得分:25)
有一个更清洁的解决方案:尝试将GAE的memcache添加到强制内置组件中。
在PyDev-> Interpreter-Python-> ForcedBuiltins窗口中,添加“google.appengine.api.memcache”条目并应用。
双击内存缓存错误以检查它们,它们会消失!
请确保系统pythonpath包含google APE安装目录。
答案 1 :(得分:4)
我参加派对有点晚了,但您可以在所有使用memcache的文件中添加以下注释,以便有选择地关闭pydev分析:
#@PydevCodeAnalysisIgnore
答案 2 :(得分:4)
如果您不想关闭项目/模块的所有代码分析,则只需为该行关闭它。 This answer解释说您可以按Ctrl + 1进行快速修复,并在该行的末尾插入#@UndefinedVariable
。
答案 3 :(得分:3)
您使用的是什么版本的PyDev?最近的一个(1.5)或谷歌教程引用的旧的? 请参阅this thread。
由于PyDEV插件无法读取
$HOME/.pystartup
,因此触摸函数/类不是解决方案。因为它分析了要导入的python模块的语法和结构,但是当我从Eclipse的首选项面板设置PYTHONPATH
时。
您的PYTHONPATH
也参考了Google图书馆吗?
它们可能是1.5中代码完成的问题,这可能会迫使您禁用代码分析:Pydev 1.5.0 code anlaysis breaks code pyqt4 code completion - ID: 2855598
安装了
pyqt 4.5.4
最初我安装了pydev 1.4.8
开源版本,代码完成工作正常 更新到pydev 1.5.0后,pyqt代码完成停止运行 在"eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?"
中禁用Pydev代码分析后,代码完成再次开始为PyQt工作 课等。
答案 4 :(得分:3)
这对我有用,它与上述解决方案不同。 非常直截了当: http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/
只是说将google_appengine文件夹添加到pydev python解释程序库。
答案 5 :(得分: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
您可以在生产版本中将其转出。
只是让eclipse高兴并让代码完成工作。