Eclipse+PyDev+GAE memcache“来自导入的未定义变量:get”

Posted

技术标签:

【中文标题】Eclipse+PyDev+GAE memcache“来自导入的未定义变量:get”【英文标题】:Eclipse+PyDev+GAE memcache "Undefined variable from import: get" 【发布时间】:2010-11-30 23:44:54 【问题描述】:

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

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

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

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

更新:

    我使用的是 PyDev 1.5.0,但在使用 1.4.8 时遇到了同样的情况。 我的 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 识别吗?

【问题讨论】:

和 1.4.8 一样吗?那么应该是PYTHONPATH定义的问题。 Eclipse Indigo SR2 + PyDev 2.5(Google App Engine 1.6.6 应用程序)和 Python 3.2 仍然出现此错误。奇怪的事情......在我的情况下,解决方案是在页面顶部添加@Richard Green 提到的#@PydevCodeAnalysisIgnore:***.com/a/2930265/114029 【参考方案1】:

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

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

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

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

【讨论】:

不知道为什么,但我不得不从 Eclipse 中删除该项目并重新导入它才能工作。 这在 OS X Lion 和 Indigo 以及最新的 PyDev 2.5+ 和 GAE 1.6.6 中对我有用之后我删除了 GAE 项目并将其重新导入为@Ralphz说...在 OS X 中添加您的 Google App Engine 文件夹,you will need to go into the .app folder...【参考方案2】:

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

#@PydevCodeAnalysisIgnore

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

您使用的是什么版本的 PyDev?最新版本 (1.5) 还是 Google 教程中提到的旧版本? 见this thread。

有一个类似的issue with PyROOT

由于 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 的代码完成功能再次开始工作 类等。

【讨论】:

我使用的是 PyDev 1.5.0,但使用 1.4.8 时也遇到了同样的情况。【参考方案5】:

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

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

【讨论】:

【参考方案6】:

我通过在文件顶部的代码中添加这几行来解决这个问题:

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 开心并让代码完成工作。

【讨论】:

以上是关于Eclipse+PyDev+GAE memcache“来自导入的未定义变量:get”的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 GAE 上的 MemCache 和 Datastore 之间的一致性?

python gae-memcache-decorator.py

Eclipse 无法识别 Pydev

如何在Eclipse配置PyDev插件

python+Eclipse+pydev环境搭建

python+Eclipse+pydev环境搭建