GAE 1.5.5本地SDK无法与python2.7运行时一起运行

时间:2011-10-12 12:49:12

标签: python google-app-engine python-2.7

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路径

未设置Google App Engine的Python路径时,应用引擎会运行 使用Python 2.6.6。

要解决此问题,我将Python路径设置为Google App中的/usr/bin/python2.7 引擎偏好。

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

请注意,我可以继续使用app.yaml和AAA.py修改运行CGI, 比照变通。但是,这样做会导致以下错误:

的Jinja2

当我运行import jinja2时,我得到ImportError

Django2

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

我最终得到了Django 0.96。

理论

鉴于以下内容:

  • http://code.google.com/appengine/docs/python/tools/libraries27.html state“由use_library()函数提供 google.appengine.dist包在Python 2.7中不可用。“
  • use_library适合我
  • use_library是必需的,因为“libraries:{django:{..., version:“1.2”}}声明未将django版本设置为1.2
  • 只有Django 1.2包含在Python 2.7运行时中(按照 libraries27.html链接上面)
  • 我必须按顺序在Python路径中手动指定Python 2.7 让GAE使用Python 2.7
  • WSGI未正确加载应用程序
  • Jinja2无法导入

我相信我并没有真正使用Python 2.7 GAE运行时(即GAE 1.5.5 SDK中忽略了app.yaml声明)。

我希望以上内容是一个有用的描述,如果您对此处可能发生的事情以及潜在的解决方案有任何想法,我将不胜感激。

3 个答案:

答案 0 :(得分:6)

我有同样的问题,但在Windows上,I posted on the Google App Engine forum这是我得到的官方回复:

  

Dev服务器尚不支持2.7。目前唯一的测试方法   基于2.7的代码是关于appengine的

答案 1 :(得分:4)

您可以将2.7运行时与本地SDK一起使用,但不是在线程安全模式下,或者您的应用程序定义为script: your.app。而是使用script: your_main_script.py

对于SDK中没有的jinja2和webapp2,您可以下载它们并将它们放在SDK基目录中,默认情况下将其添加到sys.path。

您将无法测试多线程功能,但您可以执行其他所有操作,只需在部署之前对app.yamlyour_main_script.py进行更改。

编辑:此外,我必须在os.environ[u'APPENGINE_RUNTIME'] = u'python27'中执行your_main_script.py,以强制SDK使用webapp2。

答案 2 :(得分:1)

Allbuttonspressed最近发布了这个方便的guide;
你可以在Python27上运行dev_appserverthreadsafe设置为yes。