2009-09-24 9 views
19

J'ai commencé à utiliser Eclipe + PyDev comme environnement pour développer ma première application pour Google App Engine. Eclipse est configuré selon this tutorial.Erreur Eclipse + PyDev + GAE memcache

Tout fonctionnait jusqu'à ce que je commence à utiliser memcache. PyDev signale les erreurs et je ne sais pas comment le résoudre:

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

Erreur: Undefined variable d'importation: obtenir

Comment résoudre ce problème? Bien sûr, c'est seulement un problème de vérificateur PyDev. Le code est correct et fonctionne sur GAE.

MISE À JOUR:

  1. J'utilise PyDev 1.5.0 mais connu la même chose avec 1.4.8.
  2. Mon PYTHONPATH comprend (ensemble dans les propriétés du projet/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

MISE À JOUR 2:

J'ai jeté un oeil à C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py et trouvé get() n'est pas déclaré comme memcache fonction du module. Ils utilisent l'astuce suivante pour le faire (je ne l'ai pas entendu parler de cette possibilité):

_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 ... Toute idée comment forcer PyDev reconnaître que?

+0

Même chose avec 1.4.8? Cela devrait donc être un problème de définition de PYTHONPATH. – VonC

+0

J'ai toujours eu cette erreur avec Eclipse Indigo SR2 + PyDev 2.5 (application Google App Engine 1.6.6) et Python 3.2. chose étrange ... La solution dans mon cas était d'ajouter '# @ PydevCodeAnalysisIgnore' en haut de la page que @Richard Green mentionne: http://stackoverflow.com/a/2930265/114029 –

Répondre

3

Quelle version de PyDev utilisez-vous? Un récent (1.5) ou l'ancien référé par le tutoriel Google?
Voir this thread.

Il y a un même 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.

Ainsi, votre référence ne PYTHONPATH la bibliothèque Google?


Ils pourraient être un problème avec l'achèvement du code 1.5 qui pourrait vous forcer à désactiver l'analyse de code: 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

J'utilise PyDev 1.5 .0 mais a connu la même chose avec 1.4.8. – bocco

4

Je suis un peu en retard à la fête, mais vous pouvez ajouter ce qui suit commenter dans tous vos fichiers qui utilisent memcache pour activer sélectivement l'analyse de pydev:

#@PydevCodeAnalysisIgnore

4

Si vous ne voulez pas désactiver toutes les analyses de code pour votre projet/module, puis éteignez-le pour cette ligne.This answer explique que vous pouvez appuyer sur Ctrl + 1 pour afficher le correctif rapide et insérer #@UndefinedVariable à la fin de la ligne.

25

Il existe une solution plus propre: Essayez d'ajouter memcache de GAE à vos builtins forcés.

Dans votre fenêtre PyDev-> Interpreter-Python-> ForcedBuiltins, ajoutez l'entrée "google.appengine.api.memcache" et appliquez-la.

Double-cliquez sur les erreurs memcache pour les vérifier, elles disparaissent!

Veuillez vous assurer que le système pythonpath inclut le répertoire d'installation de google APE.

+2

Merci beaucoup. Ce conseil doit être voté! – smith324

+2

Cela a fonctionné pour moi aussi, merci! –

+0

Je ne sais pas pourquoi mais j'ai dû supprimer le projet de l'éclipse et le réimporter pour que cela fonctionne. – Ralphz

0

Je fixe en ajoutant ces quelques lignes à mon code sur le dessus de mon dossier:

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 

Vous pouvez CommNET dehors dans la version de production. C'est seulement pour que l'éclipse soit satisfaite et que la complétion du code fonctionne.