【问题标题】:Why isn't my webapp2 import / Google App Engine "Hello, World" working?为什么我的 webapp2 import / Google App Engine "Hello, World" 不起作用?
【发布时间】:2012-07-11 16:58:21
【问题描述】:

虽然我能够让我的“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 中的结果相同

【问题讨论】:

  • 您的app.yaml 中有什么内容?你使用的是什么浏览器?你在使用 SDK 吗?哪个版本?如果/Users/brian/Repos/app_engine_hello_world/build 不在您的PYTHON_PATH 中,则不会导入。要检查它echo $PYTHON_PATH 或 Python REPL import sysprint sys.path
  • @bossylobster - 感谢您的后续问题和建议。他们非常感激。我在上面编辑了我的问题,包括我的app.yaml、浏览器和 SDK 信息。使用 IDLE,我确认 /Users/brian/Repos/app_engine_hello_world/build 不在我的 PYTHON_PATH 中。你能告诉我如何将目录添加到 PYTHON_PATH 吗?和添加到 $PATH 一样吗?对不起,如果这是一个菜鸟问题。
  • 如果您没有在实际的应用程序引擎或 dev_appserver 上运行,我猜您可能不需要 webapp2。尝试条件导入。 USE_APP_ENGINE = False 如果 USE_APP_ENGINE:导入 webapp2

标签: python google-app-engine webapp2


【解决方案1】:

问题出在您的 app.yaml 中:

  script: helloworld.py

当使用python27运行时,你必须把它改成:

  script: helloworld.app

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

【讨论】:

    【解决方案2】:

    您不必安装 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()
    

    【讨论】:

    • 感谢您的建议。我很欣赏他们。我编辑了我的问题以包含您询问的信息。我一直在使用 GoogleAppEngineLauncher 来运行和部署我的应用程序。据我所知,GAE Launcher 应用程序是我下载 SDK 时安装的所有应用程序。命令行中的$ python dev_appserver.py 提供/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: can't open file 'dev_appserver.py': [Errno 2] No such file or directory 感谢您提出的任何其他建议!
    • 你的建议奏效了!谢谢!我可能需要花更多时间查看 webapp2/GAE 文档,但奇怪的是这段代码 sn-p 并不明显。也许问题是特定于我们的设置(?)。如果您碰巧记得最初在哪里找到它并且可以发布链接,我会在那里跟进以获取更多信息。再次感谢!
    • 它在文档中的某处。可能在 2.5 文档中。尽管很明显您需要对应用程序做一些事情。仅仅定义它和它的类不会做任何事情。
    • 您只需要 Python 2.5 中的 __name__ 样板。如果您切换到使用 Python 2.7 并启用线程安全,您的代码将按原样运行。
    • 嗯,不知道。谢谢
    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2013-09-14
    • 2017-10-04
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多