python导入顺序如何影响名称?
我正在做一个烧瓶教程(),我发现了一个我无法解释的行为。 本教程的主目录结构为:python导入顺序如何影响名称?,python,import,module,flask,Python,Import,Module,Flask,我正在做一个烧瓶教程(),我发现了一个我无法解释的行为。 本教程的主目录结构为: microblog | |---- app | |---- __init__.py | |---- views.py | |---- flask |---- run.py 文件的内容包括: 微博/run.py 微博/app/init.py 微博/app/views.py 一切都正常,但如果我将这两条线调换: app = Flask(__name__) from app import vi
microblog
|
|---- app
| |---- __init__.py
| |---- views.py
|
|---- flask
|---- run.py
文件的内容包括:
微博/run.py
微博/app/init.py
微博/app/views.py
一切都正常,但如果我将这两条线调换:
app = Flask(__name__)
from app import views
在views.py中,然后执行run.py,得到:
ImportError:无法导入名称应用程序
为什么会发生这种情况?因为您正试图从新创建的变量
app
导入。如果要导入变量模块,请使用importlib
package:
my_module = importlib.import_module(app, 'view')
与另一个答案相反,这是一个循环进口问题
app.\uuuu init\uuuuuu
尝试导入app.views
,它尝试导入在app.中创建的app.app
Flask
。如果烧瓶
是在应用程序之前创建的。导入应用程序视图
,应用程序视图
将查找应用程序视图
。如果导入后创建了Flask
,则当app.views
尝试查找它时,它还不存在
循环进口造成了各种可怕的问题。这可能很困难,但处理它们的最佳方法通常是重新组织代码,这样就不会出现循环导入。我还建议不要用相同的名称命名文件和变量,如果文件/模块的名称app包含变量app,这只是时间问题。声明每个文件名/模块/变量都有自己的唯一名称,这样调试起来就容易多了。
from app import app
@app.route("/")
@app.route("/index")
def index():
return "Hello World!"
app = Flask(__name__)
from app import views
my_module = importlib.import_module(app, 'view')