【问题标题】:GAE 1.5.5 local SDK fails to run with python2.7 runtimeGAE 1.5.5 本地 SDK 无法与 python2.7 运行时一起运行
【发布时间】:2011-12-06 02:53:55
【问题描述】:

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。

为了解决这个问题,我在 Google 应用中将 Python 路径设置为 /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, 比照。然而,这样做仍然会导致以下错误:

神社2

当我运行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 声明“由提供的 use_library() 函数 google.appengine.dist 包在 Python 2.7 中不可用。”
  • use_library 适合我
  • use_library 是必需的,因为“库:{django: {..., version: "1.2"}} 声明未将 django 版本设置为 1.2
  • Python 2.7 运行时中仅包含 Django 1.2(根据 上面的libraries27.html链接)
  • 我必须在 Python 路径中手动指定 Python 2.7 才能按顺序 让 GAE 使用 Python 2.7
  • WSGI 无法正确加载应用程序
  • Jinja2 无法导入

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

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

【问题讨论】:

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


    【解决方案1】:

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

    开发服务器还不支持 2.7。目前唯一的测试方法 基于 2.7 的代码在 appengine 上

    【讨论】:

    • 该死的,我对此感到非常兴奋......必须这样做 git branch -d python27
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 2013-06-28
        • 2013-07-11
        相关资源
        最近更新 更多