ImportError - GAE中没有名为main的模块

时间:2013-06-23 23:33:40

标签: python google-app-engine importerror

在我的Google App Engine应用中,我收到错误

  

ImportError:没有名为main

的模块

转到网址/foo时。我的应用程序中的所有文件都在父目录中。

这是我的app.yaml

application: foobar
version: 1
runtime: python27
api_version: 1
threadsafe: no

handlers:

- url: /foo.*
  script: main.application

- url: /
  static_files: index.html

- url: /(.*\.(html|css|js|gif|jpg|png|ico))
  static_files: \1
  upload: .*
  expiration: "1d"

这是我的main.py

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

class Handler(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello world!') 

def main():
    application = webapp.WSGIApplication([('/foo', Handler)],
                                         debug=False)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

当我将main.application更改为main.py或仅main时,我收到同样的错误。为什么会出现此错误?

3 个答案:

答案 0 :(得分:4)

您的配置正常 - 仅适用于main.py中的小错误:您需要从application模块访问main名称,因此配置为:{{1 }}。这种改变应该可以解决问题:

main.application

不要担心 - application = webapp.WSGIApplication([('/foo', Handler)], debug=False) def main(): util.run_wsgi_app(application) 对象在创建时不会运行,也不会从此模块导入时,它只会在显式所有内容上运行,例如application或在谷歌的内部架构中。

答案 1 :(得分:2)

看一下python27的入门。你混合了CGI和WSGI。你必须在这里使用webapp2。

您的WSGI main.py:

import webapp2

class Handler(webapp2.RequestHandler):

    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello World!')


application = webapp2.WSGIApplication([
    ('/foo', Handler),
], debug=True)

另见关于CGI和WSGI的博文:http://blog.notdot.net/2011/10/Migrating-to-Python-2-7-part-1-Threadsafe

答案 2 :(得分:1)

正如documentation所说,

  

静态文件不能与应用程序代码文件相同。如果是静态的   文件路径匹配动态处理程序中使用的脚本的路径   脚本将不可用于动态处理程序。

在我的情况下,问题是该行

upload: .*

匹配我父目录中的所有文件,包括main.py.这意味着main.py不可用于动态处理程序。修复方法是将此行更改为仅识别此规则的URL行识别的相同文件:

upload: .*\.(html|css|js|gif|jpg|png|ico)