2009-09-24 23 views
19

Empecé a utilizar Eclipe + PyDev como entorno para desarrollar mi primera aplicación para Google App Engine. Eclipse está configurado de acuerdo con this tutorial.Eclipse + error de Memcache de PyDev + GAE

Todo estaba funcionando hasta que empiece a usar Memcache. PyDev informa de los errores y no sé cómo solucionarlo:

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

error: Undefined variable de importación: llegar

Cómo solucionar este problema? Claro, solo es un problema del verificador PyDev. El código es correcto y se ejecuta en GAE.

ACTUALIZACIÓN:

  1. estoy usando PyDev 1.5.0 pero experimentó lo mismo con 1.4.8.
  2. Mi PYTHONPATH incluye (ajustado en Propiedades del proyecto/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

ACTUALIZACIÓN 2:

Eché un vistazo a C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py y encontré que get() no está declarado como memcache función del módulo. Utilizan el siguiente truco para hacer eso (no oí sobre dicha posibilidad):

_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 ... ¿Alguna idea de cómo forzar PyDev reconocer que?

+0

¿Lo mismo con 1.4.8? Entonces debería ser un problema de definición PYTHONPATH. – VonC

+0

Todavía tengo este error con Eclipse Indigo SR2 + PyDev 2.5 (aplicación Google App Engine 1.6.6) y Python 3.2. Algo extraño ... La solución en mi caso fue agregar '# @ PydevCodeAnalysisIgnore' en la parte superior de la página cuando @Richard Green menciona: http://stackoverflow.com/a/2930265/114029 –

Respuesta

3

¿Qué versión de PyDev estás usando? ¿Uno reciente (1.5) o el anterior referido por el tutorial de Google?
Ver this thread.

Hay un parecido Lo mismo ocurre con su referencia PYTHONPATH la biblioteca de Google 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.

?


Podrían ser un problema con la finalización de código en 1.5 que podría obligar a desactivar el análisis de código: 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

Estoy usando PyDev 1.5 .0 pero experimentó lo mismo con 1.4.8. – bocco

4

estoy un poco tarde a la fiesta, pero se puede añadir lo siguiente comentar en todos los archivos que utilizan memcache para cambiar selectivamente el análisis pydev:

#@PydevCodeAnalysisIgnore

4

Si no desea desactivar todo el análisis de código para su proyecto/módulo, luego simplemente apáguelo para esa línea.This answer explica que puede presionar Ctrl + 1 para abrir la solución rápida e insertar #@UndefinedVariable al final de la línea.

25

Hay una solución más limpia: intente agregar Memcache de GAE a sus construcciones internas forzadas.

En su ventana PyDev-> Intérprete-Python-> ForcedBuiltins, agregue la entrada "google.appengine.api.memcache" y aplíquela.

Haz doble clic en los errores de Memcache para volver a verificarlos, ¡desaparecen!

Asegúrese de que el sistema pythonpath incluye el directorio de instalación de google APE.

+2

Muchas gracias. ¡Este consejo necesita ser votado! – smith324

+2

Esto funcionó para mí también, gracias! –

+0

No estoy seguro por qué, pero tuve que eliminar el proyecto del eclipse y volver a importarlo para que funcione. – Ralphz

0

Me fijo que mediante la adición de estas pocas líneas para mi código en la parte superior de mi archivo:

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 

Puede que la Red de Comunicaciones en la versión de producción.

Es solo para mantener el eclipse feliz y para permitir que el código funcione.

Cuestiones relacionadas