簡體   English   中英

ImportError - GAE中沒有名為main的模塊

[英]ImportError - No module named main in GAE

在我的Google App Engine應用中,我收到了錯誤消息

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.pymain時,我得到了同樣的錯誤。 為什么會出現此錯誤?

您的配置沒問題 - 僅適用於main.py的小錯誤:您需要從main模塊訪問application名稱,因此配置為: main.application 這種改變應該成功:

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

不要擔心 - application對象不會在創建時運行 ,也不會在從此模塊導入時運行,它只會在顯式所有內容上運行,例如.run_wsgi_app或google的內部架構。

看看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

正如文件所說,

靜態文件不能與應用程序代碼文件相同。 如果靜態文件路徑與動態處理程序中使用的腳本的路徑匹配,則該動態處理程序將無法使用該腳本。

在我的情況下,問題是該線

upload: .*

匹配我父目錄中的所有文件,包括main.py. 這意味着main.py不可用於動態處理程序。 修復是將此行更改為僅識別此規則的URL行識別的相同文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM