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

Python ImportError-GAE中没有名为main的模块,python,google-app-engine,importerror,Python,Google App Engine,Importerror,在我的谷歌应用程序引擎应用程序中,我得到了错误 ImportError:没有名为main的模块 当转到URL/foo时。我的应用程序中的所有文件都在父目录中 这是我的app.yaml: application: foobar version: 1 runtime: python27 api_version: 1 threadsafe: no handlers: - url: /foo.* script: main.application - url: / static_files:

在我的谷歌应用程序引擎应用程序中,我得到了错误

ImportError:没有名为main的模块

当转到URL
/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
时,我会收到相同的错误。为什么会发生此错误?

请看一下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的博文:

您的配置正常-仅针对
main.py
中的一个小错误:您需要从
main
模块访问
应用程序的名称,因此配置为:
main.application
。这一变化应该起到以下作用:

application = webapp.WSGIApplication([('/foo', Handler)],
                                     debug=False)
def main():
    util.run_wsgi_app(application)
别担心,
应用程序
对象不会在创建时运行,也不会从该模块导入时运行,它只会在显式的所有应用程序上运行,比如
。运行wsgi\u app
,或者在谷歌的内部架构中运行。

,正如

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

就我而言,问题在于线路

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

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

谢谢,我应该使用webapp2。然而,它仍然不起作用。作品精美;当python脚本不是主请求处理程序时(即仅适用于
/foo.*
),问题似乎会发生。请解释。您的意思是:“当python脚本不是中的主请求处理程序时”,它只处理以
/foo
开头的URL,而不是基本URL
/
。但是您没有为“/”创建处理程序,还有:ImportError:没有名为main的模块?此问题是否已解决。index.html是
/
的处理程序。问题没有解决。