2016-06-28 107 views
2

嗨,我只是在學習燒瓶。我用pip來安裝它。然後當我運行這個基本代碼時,我得到一個錯誤。基本上我看到它的工作突然退出,出現以下錯誤。這可能看起來是一些環境問題,但我不確定。這個奇怪的事情是前一天工作,現在不是。python flask找不到'__main__'模塊''

from flask import Flask 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return 'Hello, World!' 


if __name__ == '__main__': 
    app.run(debug=True, port=8000, host='0.0.0.0') 

* Running on http://0.0.0.0:8000/ (Press CTRL+C to quit) 
* Restarting with stat 
/Library/Frameworks/Python.framework/Versions/3.4/bin/python3: can't find '__main__' module in '' 
+1

您能否展示您的目錄結構以及您用於啓動程序的命令? – Wombatz

+0

感謝您的評論。我正在進入python shell並將代碼粘貼到shell中。有些原因,當我這樣做,我打我的錯誤。但它通過python3 example.py運行我的程序,然後一切正常。我不知道爲什麼我不能從殼中做到這一點,但這似乎是我的問題。 – bytes1234

+0

@ bytes1234通過將粘貼代碼複製到shell中來遠程執行任何複雜的操作必然是不可靠的 – Suever

回答

4

您說過,只有在從交互式shell運行代碼時纔會出現此問題。它是由werkzeug(基於wsgi服務器flask)中的功能引起的。

在調試模式下werkzeug會自動重啓你的服務器,如果項目文件改變了。每次檢測到更改werkzeug重新啓動最初啓動的文件。即使是第一次啓動通過文件名完成!

但在交互式shell中根本沒有文件,werkzeug認爲您的文件被稱爲""(空字符串)。然後它會嘗試運行該文件。由於某種原因,它也認爲""是指一個包。但由於該軟件包不存在,因此也不能有__main__模塊,因此出現此錯誤。

app.run(debug=False, ...) 

那麼就應該:

您可以通過運行""直接

python "" 
# prints: can't find '__main__' module in '' 

您可以嘗試通過設置調試到False(這也是默認值)disabe的reloader模擬的錯誤也在交互式會話中運行。但是,你爲什麼要這樣做?只需放入一個文件並運行即可。