1

虽然我能够让我的“Hello, World”程序在 Google App Engine (GAE) 上运行,但它仅在我创建一个不依赖于 webapp2 导入的版本时才有效。为什么导入不起作用?我需要做什么来修复它?

有效的 helloworld.py 版本:

print 'Content-Type: text/plain'
print ''
print 'Hello, World!!'

不工作的 helloworld.py 版本:

import webapp2

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, World!')

app = webapp2.WSGIApplication([('/', MainPage)], debug=True)

第二个版本呈现为空白页。

我认为问题在于 webapp2 导入不起作用。当我从命令行从与我的 hello world 程序相同的目录中运行 python 时,我得到以下信息:

Brians-MacBook-Air-2:app_engine_hello_world brian$ python
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import webapp2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named webapp2

但是,我在以下目录中看到 webapp2.py:

Brians-MacBook-Air-2:webapp2 brian$ pwd
/Users/brian/Repos/app_engine_hello_world/build/webapp2

另外,我正在运行安装在以下位置的 python 2.7:

Brians-MacBook-Air-2:app_engine_hello_world brian$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

编辑:添加我的 app.yaml 文件和其他一些可能有用的信息......

application: hello-world-cs253
version: 1
runtime: python27
api_version: 1
threadsafe: no

handlers:
- url: /.*
  script: helloworld.py

我正在使用 SDK / GAE 启动器的 1.7.0 - 2012-06-26 版本

Chrome、Firefox 和 Safari 中的结果相同

4

2 回答 2

4

您不必安装 webapp2。当您使用项目目录的路径作为参数运行 dev_appserver.py 时,它会处理webapp2.

你有一个 app.yaml,它是正确的吗?

对于 Python2.7,您需要指定您使用的是 Python2.7。运行时应该是 python27

application: your_app
version: 1
runtime: python27    #important
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: your_app.py

你正在运行什么命令来运行你的程序?

做这个 -

you@your-computer:~/GAE_folder$ python dev_appserver.py /path/to/your/project/directory

然后localhost:8080在浏览器上打开。

编辑 -

我想我知道问题是什么。当我第一次尝试网站上给出的示例时,它也发生在我身上。

最后将这段代码添加到您的helloworld.py文件中 -

def main():
    app.run()

if __name__=='__main__':
    main()
于 2012-07-12T01:39:53.410 回答
1

问题出在您的app.yaml中:

  script: helloworld.py

使用python27运行时时,必须将其更改为:

  script: helloworld.app

上面建议的解决方案似乎有效,但严格来说这是正确的方法。使用 main 函数是不必要的并且不推荐使用。

于 2013-07-01T09:55:21.213 回答