Eclipse+PyDev + Gae memcache error

Zacząłem używać Eclipe + PyDev jako środowiska do tworzenia mojej pierwszej aplikacji dla Google App Engine. Eclipse jest skonfigurowane zgodnie z ten tutorial .

Wszystko działało, dopóki nie zacząłem używać memcache. PyDev zgłasza błędy i nie wiem jak to naprawić:

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

Error: Undefined variable from import: get

Jak to naprawić? Jasne, to tylko PyDev checker problem. Kod jest poprawny i działa na GAE.

Aktualizacja:

  1. używam PyDev 1.5.0, ale doświadczyłem tego samego z 1.4.8.
  2. my PYTHONPATH includes (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:

Spojrzałem na C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py I found get() nie jest zadeklarowana jako memcache funkcja modułu. Używają do tego poniższej sztuczki (nie słyszałem o takich możliwość):

_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... Jakiś pomysł, jak zmusić Pydeva, by to rozpoznał?

Author: bocco, 2009-09-24

6 answers

Jakiej wersji PyDev używasz? Najnowszy (1.5) lub Stary, o którym mowa w samouczku Google?
Zobacz Ten wątek .

Jest podobny problem z PyROOT

Ponieważ wtyczka PyDEV nie odczytuje $HOME/.pystartup, dotykanie funkcji/ klas nie jest rozwiązaniem. Ponieważ analizuje składnię i struktury modułów Pythona, które mają być importowane Nie w locie, ale po ustawieniu PYTHONPATH z panelu preferencji Eclipse.

Tak jak twoje PYTHONPATH odwołać się do biblioteki Google?


Mogą być problemy z wypełnianiem kodu w 1.5, co może zmusić cię do wyłączenia analizy kodu: Pydev 1.5.0 code anlaysis łamie kod pyqt4 code completion-ID: 2855598

Mieć pyqt 4.5.4 zainstalowany.
Początkowo miałem zainstalowaną wersję open source i uzupełnianie kodu działało dobrze.
Po aktualizacji do pydev 1.5.0 uzupełnianie kodu PyQt przestało działać.
Po wyłączeniu kodu Pydev analiza w "eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?", uzupełnianie kodu zaczęło działać ponownie Dla PyQt zajęcia itp.

 3
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 05:44:39

Jest czystsze rozwiązanie: spróbuj dodać memcache GAE do swoich forced builtins.

W oknie PyDev->Interpreter-Python->ForcedBuiltins dodaj " google.appengine.api.memcache " wpis i aplikuj.

Kliknij dwukrotnie na błędy memcache, aby je sprawdzić, znikają!

Upewnij się, że system pythonpath zawiera katalog instalacji google APE.

 25
Author: analogue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-07 04:24:52

Jestem trochę spóźniony na imprezę, ale możesz dodać następujący komentarz we wszystkich swoich plikach, które używają memcache, aby selektywnie wyłączyć analizę pydev:

#@PydevCodeAnalysisIgnore

 4
Author: Richard Green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 15:25:20

Jeśli nie chcesz wyłączyć analizy kodu dla Twojego projektu/modułu, po prostu wyłącz ją dla tej linii. Ta odpowiedź wyjaśnia, że możesz nacisnąć Ctrl+1, aby wywołać szybką poprawkę i wstawić #@UndefinedVariable na końcu linii.

 4
Author: idbrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:45

To działało dla mnie i jest INNE niż powyższe rozwiązania. Całkiem prosto: http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

Po prostu mówi, aby dodać folder google_appengine do biblioteki interpretera Pythona pydev.

 3
Author: kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-19 13:56:33

Naprawiłem to dodając kilka linijek do mojego kodu na górze mojego pliku:

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

Możesz go udostępnić w wersji produkcyjnej.

To tylko po to, aby Eclipse było szczęśliwe i aby dopełnienie kodu działało.

 0
Author: Michał Šrajer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-17 09:50:53