2017-10-19 100 views
1

我正在学习烧瓶。我发现,例如使用如下代码为什么我不能在顶部移动导入?

__init__.py

from flask import Flask 

app = Flask(__name__) 
from app import views 

view.py

from app import app 

@app.route('/') 
def index(): 
    return "hello world" 

run.py(在顶层):

from app import app 
app.run() 

我不明白为什么我不能移动from app import views到 最佳。如果我这样做,我得到错误:

> run.py 
Traceback (most recent call last): 
    File "F:\app1\run.py", line 1, in <module> 
    from app import app 
    File "F:\app1\app\__init__.py", line 2, in <module> 
    from app import views 
    File "F:\app1\app\views.py", line 1, in <module> 
    from app import app 
ImportError: cannot import name 'app' 
+1

我认为这是一个相对导入与蟒蛇3绝对导入问题。 –

+0

检查此问题并告诉我它是否解决它:https://stackoverflow.com/questions/38564382/importerror-on-python-3- python-2-7 –

+0

我认为这是一个循环导入问题:''app'对象必须在'__init __。py'中定义,然后才能从'view.py'中导入。 – randomir

回答

0

run.py文件行

from app import app 

手段“从包的应用程序(文件夹__init__.py文件,F:\ APP1 \你的情况的应用程序,导入对象应用程序”,并在__init__.py文件行

app = Flask(__name__) 

创建由您的应用程序名称的application object主要的困惑 - app - 与应用程序对象名称一致。
如果线

from app import views 

移到高于

app = Flask(__name__) 

view.pyfrom app import app将提高ImportError,因为对象appapp包尚未确定。

0

Python是解释型语言。当涉及到一行时,它尝试执行它。这就是为什么您在定义应用程序之前无法导入views的原因。的__init__.py

app = Flask(__name__) 
from app import views # it will "execute: views.py" 
# views.py - indenting for better understanding 
    from app import app # App is defined here and it can be imported 

工作版本不工作的__init__.py

from app import vies # it will execute vies.py" 
# vies.py - indenting for better understanding 
    from app import app # Exception - app doesn't exist here 
app = Flask(__name__) 

版本你需要非常小心与蟒蛇进口。

相关问题