Подтвердить что ты не робот

Eclipse + PyDev + GAE memcache "Неопределенная переменная из импорта: получить"

Я начал использовать Eclipe + PyDev в качестве среды для разработки моего первого приложения для Google App Engine. Eclipse настраивается в соответствии с этим руководством.

Все работало, пока я не начал использовать memcache. PyDev сообщает об ошибках, и я не знаю, как их исправить:

alt text

Ошибка: неопределенная переменная из импорта: получить

Как это исправить? Конечно, это только проблема проверки PyDev. Код правильный и работает на GAE.

ОБНОВИТЬ:

  1. Я использую PyDev 1.5.0, но испытал то же самое с 1.4.8.
  2. Моя PYTHONPATH включает (задается в 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

ОБНОВЛЕНИЕ 2:

Я посмотрел на C:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.py и обнаружил, что get() не объявлен как функция модуля memcache. Для этого они используют следующий прием (я не слышал о такой возможности):

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

Хм... Есть идеи, как заставить PyDev признать это?

4b9b3361

Ответ 1

Какую версию PyDev вы используете? Недавний (1.5) или старый, упомянутый в учебнике Google?
См. этот поток.

Существует проблема с с PyROOT

Так как плагин PyDEV не читает $HOME/.pystartup, прикосновение к функциям/классам не является решением. Потому что он анализирует синтаксис и структуры модулей python для импорта не на лету, но когда я устанавливаю панель PYTHONPATH из панели предпочтений Eclipse.

Значит, ваш PYTHONPATH ссылается на библиотеку Google?


Они могут быть проблемой с завершением кода в 1.5, что может заставить вас отключить анализ кода: Pydev 1.5.0 код anlaysis разрывает код pyqt4 завершение кода - ID: 2855598

установлены pyqt 4.5.4.
Первоначально у меня была pydev 1.4.8 версия с открытым исходным кодом, и завершение кода работало нормально.
После обновления до pydev 1.5.0 завершение работы кода pyqt прекратилось.
После отключения анализа кода Pydev в "eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?" завершение работы кода снова возобновилось для PyQt классы и т.д.

Ответ 2

Существует более чистое решение: попробуйте добавить memcache GAE к принудительным встроенным функциям.

В окне PyDev- > Interpreter-Python- > ForcedBuiltins добавьте запись "google.appengine.api.memcache" и примените.

Дважды щелкните по ошибкам memcache, чтобы проверить их, они исчезают!

Пожалуйста, убедитесь, что система pythonpath содержит каталог установки Google APE.

Ответ 3

Я немного опаздываю на вечеринку, но вы можете добавить следующий комментарий во все ваши файлы, которые используют memcache, чтобы выборочно отключить анализ pydev:

#@PydevCodeAnalysisIgnore

Ответ 4

Если вы не хотите отключать весь анализ кода для своего проекта/модуля, просто отключайте его для этой строки. Этот ответ объясняет, что вы можете нажать Ctrl + 1, чтобы вызвать быстрое исправление и вставить #@UndefinedVariable в конец строки.

Ответ 5

Это работало для меня, и это отличалось от решений выше. Довольно прямо: http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

Просто говорит, чтобы добавить папку google_appengine в библиотеку интерпретатора pydev python.

Ответ 6

Я исправил это, добавив несколько строк в мой код в верхней части моего файла:

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

Вы можете опубликовать его в производственной версии.

Это только для того, чтобы сохранить затмение счастливым и позволить завершить работу кода.