2017-10-19 26 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__) 

版本你需要非常小心與蟒蛇進口。

相關問題