19

我已经开始使用 Ecipe+PyDev 作为为 Google App Engine 开发我的第一个应用程序的环境。Eclipse 是根据本教程配置的。

一切正常,直到我开始使用 memcache。PyDev 报告错误,我不知道如何修复它:

替代文字

错误:来自导入的未定义变量:get

如何解决这个问题?当然,这只是 PyDev 检查器的问题。代码正确并在 GAE 上运行。

更新:

  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 识别吗?

4

6 回答 6

25

有一个更清洁的解决方案:尝试将 GAE 的内存缓存添加到您的强制内置。

在您的 PyDev->Interpreter-Python->ForcedBuiltins 窗口中,添加“google.appengine.api.memcache”条目并应用。

双击内存缓存错误以检查它们,它们消失了!

请确保系统 pythonpath 包含 google APE 安装目录。

于 2010-11-24T00:09:11.483 回答
4

我参加聚会有点晚了,但是您可以在所有使用 memcache 有选择地关闭 pydev 分析的文件中添加以下注释:

#@PydevCodeAnalysisIgnore

于 2010-05-28T15:25:20.123 回答
4

如果您不想为您的项目/模块关闭所有代码分析,那么只需为该行关闭它。此答案说明您可以按 Ctrl+1 来调出快速修复并#@UndefinedVariable在行尾插入。

于 2010-06-27T02:42:40.863 回答
3

你使用的是什么版本的 PyDev?最近的(1.5)还是谷歌教程提到的旧的?
看到这个线程

PyROOT也有类似的问题

由于 PyDEV 插件不读取$HOME/.pystartup,因此触摸函数/类不是解决方案。因为它不是即时分析要导入的 python 模块的语法和结构,而是当我PYTHONPATH从 Eclipse 的首选项面板设置时。

那么您是否PYTHONPATH参考了 Google 图书馆?


它们可能是 1.5 中代码完成的问题,这可能会迫使您禁用代码分析:Pydev 1.5.0 代码分析会破坏代码 pyqt4 代码完成 - ID:2855598

pyqt 4.5.4安装。
最初我pydev 1.4.8安装了开源版本并且代码完成工作正常。
更新到 pydev 1.5.0 后,pyqt 代码完成功能停止运行。
在禁用 Pydev 代码分析后"eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?",代码完成再次开始为 PyQt 类等工作。

于 2009-09-24T05:44:39.943 回答
3

这对我有用,它与上面的解决方案不同。非常简单: http ://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

只是说将 google_appengine 文件夹添加到 pydev python 解释器库中。

于 2013-03-19T13:56:33.947 回答
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 开心并让代码完成工作。

于 2013-12-17T09:50:53.530 回答