Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python导入顺序如何影响名称?_Python_Import_Module_Flask - Fatal编程技术网

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