ImportError: cannot import name
我有两个文件:
App.Py
1 2 3 4 5 6 7 8 | from flask import Flask from mod_login import mod_login app = Flask(__name__) app.config.update( USERNAME='admin', PASSWORD='default' ) |
MyLogLogin
1 2 3 4 5 6 7 | # coding: utf8 from flask import Blueprint, render_template, redirect, session, url_for, request from functools import wraps from app import app mod_login = Blueprint('mod_login', __name__, template_folder='templates') |
python返回这个错误:
1 2 3 4 5 6 7 8 | Traceback (most recent call last): File"app.py", line 2, in <module> from mod_login import mod_login File"mod_login.py", line 5, in <module> from app import app File"app.py", line 2, in <module> from mod_login import mod_login ImportError: cannot import name mod_login |
如果删除
问题是您有一个循环导入:在App.Py
1 | from mod_login import mod_login |
在MyLogLogin .Py中
1 | from app import app |
这在python中是不允许的。有关详细信息,请参见python中的循环导入依赖项。简而言之,解决方案是
- 要么把所有东西都集中在一个大文件里
- 使用本地导入延迟一个导入
如果您一直在处理脚本和函数,并且一直在移动它们(即更改定义的位置),这也会发生,因为它们可能会意外地创建循环引用。
如果您将ipython内核重置为清除任何旧的分配,您可能会发现情况已解决:
1 | %reset |
或菜单->重启终端
您可以导入整个模块而不是特定对象,而不是使用本地导入。然后,在您的
App.Py
1 2 3 4 5 6 | from flask import Flask import mod_login # ... do_stuff_with(mod_login.mod_login) |
MyLogLogin
1 2 3 | from app import app mod_login = something |
当它在一个Python控制台中时,如果您更新一个模块以便能够通过控制台使用它,那么您必须使用一个
1 | import importlib |
和
1 | importlib.reload (*module*) |
可能会解决你的问题
与@mjp的答案类似,删除了所有.pyc文件后,我的问题得到了解决。