2014-09-20 47 views
0

瓶提出了以下文件格式:Python 3中从Flask惯用的进口

runflaskapp.py 
flaskapp/ 
    __init__.py 

runflaskapp.py包含:

from flaskapp import app 
app.run(debug=True) 

flaskapp/初始化的.py包含:

from flask import Flask 
app = Flask(__name__) 

用'python3 runflaskapp.py'运行这个工作正常。然而它似乎对我来说,更Python3的方式做到这一点将 重命名'runflaskapp.py'为'flaskapp/ .py',然后运行 整个事情为'python3 -m flaskapp'。不幸的是,这并不 工作:

$ python3 -m flaskapp 
* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 
Traceback (most recent call last): 
    File "/home/username/src/flaskapp/__main__.py", line 1, in <module> 
    from flaskapp import app 
ImportError: No module named 'flaskapp' 

有谁知道为什么和如何解决它?

+0

哪个版本的Python 3.x是这样的? – abarnert 2014-09-20 04:51:56

+0

我正在使用Python 3.4.1 – 2014-09-20 05:00:49

回答

3

-m标志做到这一点:

已命名的模块搜索sys.path中,并作为__main__模块执行其内容......在供给,而不是一个正常的模块包名称,解释器将执行<pkg>.__main__作为主要模块。

换句话说,flaskapp不导入为flaskapp,但作为__main__,就像一个剧本会,然后将其__main__模块得到执行。

这意味着from flaskapp import app将无法​​正常工作,因为没有任何名称为flaskapp

但相对进口from . import app会。所以,只要flaskapp除了新的__main__.py文件以外没有任何地方的绝对进口,那一行就应该这样做。