[英]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.py
或main
時,我得到了同樣的錯誤。 為什么會出現此錯誤?
您的配置沒問題 - 僅適用於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.