19 Stimmen

Eclipse+PyDev+GAE memcache "Undefinierte Variable von import: get"

Ich habe begonnen, Eclipse+PyDev als Umgebung für die Entwicklung meiner ersten App für Google App Engine zu verwenden. Eclipse ist konfiguriert nach diese Anleitung .

Alles funktionierte, bis ich begann, Memcache zu verwenden. PyDev meldet die Fehler und ich weiß nicht, wie ich sie beheben kann:

alt text

Fehler: Undefinierte Variable aus import: get

Wie kann man das beheben? Sicher, es ist nur PyDev Checker Problem. Der Code ist korrekt und läuft auf GAE.

UPDATE:

  1. Ich verwende PyDev 1.5.0, habe aber das gleiche Problem mit 1.4.8.
  2. Mein PYTHONPATH enthält (eingestellt in Projekteigenschaften/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

UPDATE 2:

Ich habe einen Blick auf C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py und fand get() ist nicht deklariert als memcache Modulfunktion. Sie verwenden dazu den folgenden Trick (ich habe noch nie von einer solchen Möglichkeit gehört):

_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())

Hmm... Irgendeine Idee, wie man PyDev zwingen kann, das zu erkennen?

0voto

Michał Šrajer Punkte 28652

Ich habe das behoben, indem ich die folgenden Zeilen zu meinem Code am Anfang der Datei hinzugefügt habe:

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

Sie können es in der Produktionsversion ausprobieren.

Es geht nur darum, Eclipse bei Laune zu halten und die Codevervollständigung zu ermöglichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X