2009-09-24 14 views
19

Ho iniziato a utilizzare Eclipe + PyDev come ambiente per lo sviluppo della mia prima app per Google App Engine. Eclipse è configurato in base a this tutorial.Eclipse + PyDev + GAE memcache error

Tutto funzionava finché non ho iniziato ad usare memcache. PyDev segnala gli errori e non so come risolvere il problema:

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

errore: Variabile non definita da importazione: ottenere

Come risolvere questo problema? Certo, è solo un problema con il controllore PyDev. Il codice è corretto e funziona su GAE.

UPDATE:

  1. sto usando PyDev 1.5.0 ma sperimentato lo stesso con 1.4.8.
  2. mio PYTHONPATH include (set in Project Properties/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:

Ho dato un'occhiata a C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py e trovato get() non è dichiarato come funzione modulo memcache. Usano il seguente trucco per farlo (non ho sentito parlare di tale 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 ... Qualsiasi idea di come forzare PyDev a riconoscere che?

+0

Uguale a 1.4.8? Quindi dovrebbe essere un problema con la definizione di PYTHONPATH. – VonC

+0

Ho ancora ricevuto questo errore con Eclipse Indigo SR2 + PyDev 2.5 (app Google App Engine 1.6.6) e Python 3.2. cosa strana ... La soluzione nel mio caso era aggiungere '# @ PydevCodeAnalysisIgnore' nella parte superiore della pagina come @Richard Green menziona: http://stackoverflow.com/a/2930265/114029 –

risposta

3

Quale versione di PyDev stai usando? Uno recente (1.5) o quello vecchio riferito all'esercitazione di Google?
Vedere this thread.

C'è un simile 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.

Così fa il tuo PYTHONPATH riferimento la libreria di Google?


Esse potrebbero essere un problema con il completamento del codice in 1.5, che si potrebbe costringere a disabilitare l'analisi del codice: 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

Sto usando PyDev 1.5 .0 ma ha sperimentato lo stesso con 1.4.8. – bocco

4

Sono un po 'in ritardo alla festa, ma si può aggiungere il seguente commento in tutti i file che utilizzano memcache per passare selettivamente fuori analisi pydev:

#@PydevCodeAnalysisIgnore

4

Se non si desidera disattivare tutta l'analisi del codice per il tuo progetto/modulo, quindi basta spegnerlo per quella linea.This answer spiega che è possibile premere Ctrl + 1 per visualizzare la correzione rapida e inserire #@UndefinedVariable alla fine della riga.

25

C'è una soluzione più pulita: prova ad aggiungere il memcache di GAE ai tuoi builtin forzati.

Nella finestra PyDev-> Interpreter-Python-> ForcedBuiltins, aggiungere la voce "google.appengine.api.memcache" e applicare.

Fare doppio clic sugli errori di memcache per ricontrollarli, scompaiono!

Accertarsi che pythonpath di sistema includa la directory di installazione di APE di Google.

+2

Grazie mille. Questo suggerimento deve essere votato! – smith324

+2

Questo ha funzionato anche per me, grazie! –

+0

Non so perché, ma ho dovuto rimuovere il progetto da Eclipse e reimportarlo affinché funzioni. – Ralphz

0

mi fisso che con l'aggiunta di queste poche righe al mio codice sulla parte superiore del mio file:

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 

Puoi CommNet fuori in versione di produzione.

È solo per mantenere felice l'eclisse e per consentire il completamento del codice.

Problemi correlati