2014-07-05 70 views
4

我是一名Python初学者,使用__init__.py设置我的应用程序的结构时遇到了很多麻烦,即使搜索了几个教程。烧瓶结构 - 无法从__init__.py导入应用程序

此刻,我的当前目录结构如下所示

/parent 
    /myapp 
     __init__.py 
     views.py 
    /virtualenv 

以前,我有(如果它使任何区别)

/parent 
    /myapp 
    /bin 
    /include 
    /lib 

__init__.py内容如下:

from flask import Flask 
app = Flask(__name__) 

and my views.py

from myapp import app 
@app.route('/') 
def test(): 
    return 'This is a new test' 

if __name__ == '__main__': 
    app.run(debug=True) 

如果myapp正在使用init文件初始化,为什么我不能将它称为视图?我收到一个错误,指出'我无法导入应用程序,并且没有名为myapp的模块'。如果我删除init文件并将内容复制到views.py文件的顶部,则一切正常。

+0

您可能还想考虑遵循“应用程序工厂”模式来处理您要做的事情。 [fbone](https://github.com/imwilsonxu/fbone/blob/master/fbone/app.py)就是一个很好的例子。如果你想要更简单的东西,我倾向于使用。 https://github.com/DarkCrowz/innovation_center/blob/master/innovation_center/app/__init__.py – corvid

+0

@corvid的DarkCrowz链接已经死了,你能找到并更新它吗? – sAguinaga

回答

7

您正在使用views作为主脚本。你不能把一个脚本放在一个包里;它所在的目录不能被视为这样。 Python将parent/myapp目录添加到Python路径,而不是parent路径。

在顶层(旁边myapp)添加单独脚本:

from myapp import app 

if __name__ == '__main__': 
    app.run(debug=True) 

,并添加进口__init__.py导入您的观点:

from flask import Flask 
app = Flask(__name__) 

import views 

并取出if __name__ == '__main__':块从views.py