GAE Python dev сервер периодически прерывает работу после обновления до 2.7 - PullRequest
5 голосов
/ 22 января 2012

Я недавно обновил свое приложение GAE Python до Python 2.7. С тех пор я периодически получаю следующую ошибку на сервере dev, и сервер dev обслуживает пустую страницу:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 168, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler
    handler = __import__(path[0])
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/main.py", line 2, in <module>
    import views
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/views.py", line 3, in <module>
    from pytz.gae import pytz
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/pytz/__init__.py", line 34, in <module>
    from pkg_resources import resource_stream
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1818, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1690, in FindAndLoadModule
    description)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1615, in LoadModuleRestricted
    return source_file.load_module(submodule_fullname)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/dist/py_zipimport.py", line 246, in load_module
    submodname, is_package, fullpath, source = self._get_source(fullmodname)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/dist/py_zipimport.py", line 207, in _get_source
    source = self.zipfile.read(relpath.replace(os.sep, '/'))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 867, in read
    return self.open(name, "r", pwd).read()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 882, in open
    zef_file = open(self.filename, 'rb')
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 578, in __init__
    raise IOError(errno.EACCES, 'file not accessible', filename)
IOError: [Errno 13] file not accessible: '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg'
INFO     2012-01-21 20:50:44,222 dev_appserver.py:2832] "POST /manage HTTP/1.1" 500 -

Некоторые заметки:

  • Это не происходит на рабочем сервере.
  • На сервере dev мое приложение будет работать несколько минут, а затем произойдет эта ошибка.
  • Если я остановлю и перезапущу свое приложение на сервере разработчика, оно будет работать снова в течение нескольких минут.
  • Я использую последнюю версию gae-pytz , и вы можете видеть, что при импорте там происходит сбой.
  • [...] которые я удалил, похожи на то, что вы видите в конце.
  • Я не знаю, почему setuptools вызывается в конце.
  • Я использую Mac с Lion.

Я могу использовать dev-сервер, но действительно раздражает останавливаться и перезапускаться каждые несколько минут. Есть идеи как это исправить?

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

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

'/ Library / Каркасы / Python.framework / Версии / 2,7 / Библиотека / python2.7 / сайт-пакеты / Setuptools-0.6c11-py2.7.egg'

Вам потребуется включить setuptools в базу кода вашего приложения. Тот факт, что иногда это работает, говорит о том, что вы кодируете пути через различные модули, и, возможно, (в зависимости от того, что вы тестировали в dev) разные порядки импорта означают, что инструменты установки были импортированы где-то еще или требуются только в определенных точках вашего кода .

Взгляните на строку 4-я строка трассировки стека, куда импортируется pytz, следующая строка из pkg_resources import resource_stream, который вызывает остальную часть проблемы импорта. Я использую поддельный усеченный pkg_resources в корне моего проекта, который не в конечном итоге пытается импортировать вещи из инструментов установки. Вы можете запустить dev-сервер в режиме отладочного импорта, который расскажет вам намного больше

Вот фальшивка pkg_resources.

* * 1010

Возможно, есть другие / лучшие способы сделать это, но у меня это работает.

О, я бы также предложил вам использовать http://code.google.com/p/gae-pytz/ вместо pytz.

Приветствия

0 голосов
/ 11 марта 2013

Проблема заключается в ошибке на сервере разработчиков App Engine с Python 2.7.Решение здесь: Ошибка файла недоступна (setuptools) в логах

0 голосов
/ 23 декабря 2012

Альтернативный ответ на вышесказанное, который я предпочитаю.

Файл __init__.py для pytz содержит следующие строки:

#try:
#    from pkg_resources import resource_stream
#except ImportError:
resource_stream = None

Я закомментировал первые три строки, и это исправленопроблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...