Flask结构--无法从__init__.py导入应用程序

5
我是一名Python初学者,使用__init__.py设置应用程序结构时遇到了很多麻烦,即使查看了几个教程也无济于事。
目前,我的当前目录结构如下:
/parent
   /myapp
       __init__.py
       views.py
   /virtualenv

之前,我有(如果这有任何区别)

/parent
   /myapp
   /bin
   /include
   /lib

__init__.py的内容如下:

 from flask import Flask
 app = Flask(__name__)

以及我的views.py文件

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

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

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

你可能还想考虑一下“应用工厂”模式来完成你想要做的事情。fbone有一个很好的例子。如果你想要更简单的东西,这是我经常使用的。https://github.com/DarkCrowz/innovation_center/blob/master/innovation_center/app/__init__.py - corvid
@corvid,DarkCrowz的链接失效了,你能找到并更新一下吗? - sAguinaga
1个回答

10

您正在使用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

views.py中移除if __name__ == '__main__':块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接