Локальный SDK GAE 1.5.5 не запускается с python2.7 runtime - PullRequest
6 голосов
/ 12 октября 2011

GAE 1.5.5 имеет отличные, долгожданные функции. Тем не менее, они еще не работают для меня.

Я скачал и установил GAE 1.5.5 и использую вырожденное приложение «AAA» для тестирования.

Вот примерно мой app.yaml (с различными изменениями, внесенными для тестирования).

app.yaml

application: AAA # mystical creation.
version: alpha-1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /media
 static_dir: media/

- url: /favicon.ico
 static_files: media/images/favicon.ico
 upload: media/images/favicon.ico

- url: /admin
 script: AAA.app
 login: admin

- url: /.*
 script: AAA.app

skip_files:
- ^(.*/)?app\.yaml

libraries:
- name: django
 version: "1.2"
- name: jinja2
 version: latest
- name: yaml
 version: latest

Я запускаю это на Mac OS X Lion (10.7.1).

Я предполагаю, что на самом деле я не использую среду выполнения Python 2.7, несмотря на объявление в app.yaml о его использовании. Я не совсем уверен, как проверить эту теорию, но ошибки, с которыми я столкнулся, соответствуют ей. Эти ошибки воспроизводятся ниже.

Python Path

Если путь к Python в Google App Engine не задан, механизм приложения запускается используя Python 2.6.6.

Чтобы исправить это, я установил Python Path на /usr/bin/python2.7 в Google App Настройки двигателя.

WSGI

Я получаю следующую ошибку:

 /Applications/GoogleAppEngineLauncher.app/Contents/Resources/
GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
google/appengine/tools/dev_appserver.py in
GetParentPackage(self=<google.appengine.tools.dev_appserver.HardenedModulesHook
object>, fullname='AAA.app')
  2334
  2335       if self.find_module(fullname) is None:
=> 2336         raise ImportError('Could not find module %s' %
fullname)
  2337
  2338       return self._module_dict[parent_module_fullname]
builtin ImportError = <type 'exceptions.ImportError'>, fullname =
'AAA.app'
<type 'exceptions.ImportError'>: Could not find module AAA.app
     args = ('Could not find module AAA.app',)
     message = 'Could not find module AAA.app'

Где я пробовал AAA.app как:

AAA.py:

 from google.appengine.dist import use_library
 use_library('django', '1.2') # otherwise we still get django 0.96

 from django.core.handlers import wsgi
 app = wsgi.WSGIHandler()

AAA / __init__.py

# same content as above

AAA / AAA.py

# same content as above

Обратите внимание, что я могу продолжать запускать CGI с измененными app.yaml и AAA.py, mutatis mutandis . Однако, тем не менее, это приводит к следующим ошибкам:

Jinja2

Когда я запускаю import jinja2, я получаю ImportError.

* * Django2 тысяча сорок-девять

Без:

from google.appengine.dist import use_library
use_library('django', '1.2')

Я получаю Джанго 0,96.

Теория

Учитывая следующее:

  • http://code.google.com/appengine/docs/python/tools/libraries27.html заявляет "функция use_library (), предоставленная Пакет google.appengine.dist недоступен в Python 2.7. "
  • use_library работ для меня
  • use_library требуется, потому что "библиотеки: {django: {..., версия: "1.2"}} объявление не устанавливает версию django 1.2
  • Только Django 1.2 включен в среду исполнения Python 2.7 (согласно Библиотеки27.html ссылка выше)
  • Я должен вручную указать Python 2.7 в пути Python по порядку для GAE использовать Python 2.7
  • WSGI неправильно загружает приложение
  • Jinja2 не может быть импортирован

Я полагаю, что я на самом деле не использую среду исполнения Python 2.7 GAE (то есть объявление app.yaml игнорируется в SDK GAE 1.5.5).

Я надеюсь, что вышеизложенное является полезным описанием, и я был бы благодарен за любые мысли о том, что может происходить здесь - и возможных решениях.

Ответы [ 3 ]

6 голосов
/ 12 октября 2011

У меня та же проблема, но в Windows Я разместил на форуме Google App Engine и вот официальный ответ, который я получил:

Сервер Dev пока не поддерживает 2.7. В настоящее время единственный способ проверить 2.7 основанный код на appengine

4 голосов
/ 13 октября 2011

Вы можете использовать среду выполнения 2.7 с локальным SDK, но только не в поточно-безопасном режиме или с вашим приложением, определенным как script: your.app. Вместо этого используйте script: your_main_script.py.

Для jinja2 и webapp2, которые недоступны в SDK, вы можете загрузить их и поместить в базовый каталог SDK, который по умолчанию добавлен в sys.path.

Вы не сможете проверить возможности многопоточности, но вы можете сделать все остальное и просто внести изменения в app.yaml и your_main_script.py перед развертыванием.

РЕДАКТИРОВАТЬ: Кроме того, мне пришлось сделать os.environ[u'APPENGINE_RUNTIME'] = u'python27' в моем your_main_script.py, чтобы заставить SDK использовать webapp2.

1 голос
/ 19 октября 2011

Allbuttonspressed недавно опубликовал этот удобный гид ;
вы можете запустить dev_appserver на Python27 с threadsafe, установленным в yes.

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