2012-06-05 97 views
2

我的應用程序的根目錄中有一個名爲main.py的文件。該文件包含啓動應用程序的代碼:main.py拋出「ImportError:No module named app」

app = webapp2.WSGIApplication(routes = routes, debug = True, config = config) 

def main(): 
    app.run() 

if __name__ == '__main__': 
    main() 

我有,除其他外,這在app.yaml中:

- url: /.* 
    script: main.app 

升級到1.6.6 SDK後,我得到以下錯誤:

ERROR 2012-06-05 13:39:01,856 wsgi.py:189] 
Traceback (most recent call last): 
File "/Users/jdoe/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 187, in Handle 
handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
File "/Users/jdoe/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 236, in _LoadHandler 
__import__(cumulative_path) 
ImportError: No module named app 

如果我重新命名main.py任何東西比其他main.py和app.yaml中相應的更新,這個錯誤會消失,我可以運行的應用程序。

爲什麼我不能在名爲main.py的文件中有我的主例程?在App Engine SDK下載頁面上,他們表示他們現在在SDK中包含Python 2.7的實驗版本,這可能與我遇到的問題有關嗎?

感謝您的任何幫助。

+2

自己解決了這個問題。在main.py所在的相同目錄中,我創建了一個名爲main的包。在app.yaml中,我指定了在main.app中查找。似乎如果一個名爲main的包存在於main.py所在的目錄中,Python會在包的內部查找一個名爲app的模塊。但是如果不存在名爲main的軟件包,它會愉快地在main.py中查找。 – Jannik

+1

這歸結於Python,而不是App Engine - 您不能擁有同名的包和模塊。你應該將自己的見解作爲對自己問題的回答。 –

+0

@akindo,請添加您的發現作爲答案,以便他們更容易找到! –

回答

0

我作爲一個答案的評論:

這解決了我自己。在main.py所在的相同目錄中,我創建了一個名爲main的包。在app.yaml中,我指定了在main.app中查找。似乎如果一個名爲main的包存在於main.py所在的目錄中,Python會在包的內部查找一個名爲app的模塊。但是如果不存在名爲main的軟件包,它會愉快地在main.py中查找。