为什么我不能在顶部移动导入?

2024-03-28 18:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学烧瓶。我找到了下面代码的例子

__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'

Tags: runnameinfrompyimportappflask
2条回答

Python是一种解释语言。当涉及到一行时,它会尝试执行它。这就是为什么在定义app之前不能导入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__)

您需要非常小心python导入。你知道吗

run.py文件行中

from app import app

意思是“从包应用程序(带有__init__.py文件的文件夹,在您的示例中是F:\app1\app,import object app”,在__init__.py文件行中

app = Flask(__name__)

创建application object。由于应用程序名app与应用程序对象名重合而引起的主要混淆。
如果你移动线

from app import views

以上

app = Flask(__name__)

view.py中的from app import app将引发ImportError,因为尚未定义来自app包的对象app。你知道吗

相关问题 更多 >