添加__init__.py后无法导入模块

时间:2014-12-06 17:17:16

标签: python flask

我正在研究烧瓶应用程序,我有以下目录结构:

flask_app/
|
|-- __init__.py
|-- app.py
|-- views.py
|-- static/
|-- templates/

文件的示例内容为:

app.py:

from flask import Flask
import views

app = Flask(__name__)

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

views.py:

from app import app

@app.route('/')
def index():
    return "Hello, world!"a

__init__.py文件为空。

当我运行应用程序时,服务器启动,但索引页面404。我知道我需要一个__init__.py文件才能导入导入,所以views.py文件没有被导入吗?

2 个答案:

答案 0 :(得分:2)

您正在进行循环导入。当app.py导入views时,app.py处理暂停views.py进程。 views.py执行的第一件事是从app导入app.py,但尚未定义app,因此会导入app.py。这会暂停views.py的处理并开始处理app.py。等等。

Flask documentation为此提供了解决方案。

app.py

from flask import Flask

flask = Flask(__name__)

import views

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

views.py

from app import app

@app.route('/')
def index():
    return "Hello, world!"

编辑:查看烧瓶文档,在run.py上方的目录中添加flask_app并将app.py重命名为__init__.py会导致问题得到解决。

run.py

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

目录结构现在如下:

|run.py
|flask_app/
|
|-- __init__.py
|-- app.py
|-- views.py
|-- static/
|-- templates/

答案 1 :(得分:0)

if_name == main中的代码将被执行,以防该文件作为脚本运行,而不是导入。

以下是它对我有用的方法:

结构:

- >计算器(项目文件夹)

---->计算器(包文件夹)

--------> _ _init ___。py

--------> views.py

--------> createdb.py

----> runserver.py

init .py脚本

from flask import Flask

app = Flask(__name__)
app.config.update(DEBUG=True)

import createdb
import views

runserver.py脚本

#!/usr/bin/python

from calculator import app

app.run()

通过调用 runserver.py

,通过命令行运行应用程序