Python ImportError:无法导入名称
我有两个文件Python ImportError:无法导入名称,python,flask,Python,Flask,我有两个文件app.py和mod\u login.py app.py from flask import Flask from mod_login import mod_login app = Flask(__name__) app.config.update( USERNAME='admin', PASSWORD='default' ) from flask import Flask import mod_login # ... do_stuff_with(mod_lo
app.py
和mod\u login.py
app.py
from flask import Flask
from mod_login import mod_login
app = Flask(__name__)
app.config.update(
USERNAME='admin',
PASSWORD='default'
)
from flask import Flask
import mod_login
# ...
do_stuff_with(mod_login.mod_login)
mod_login.py
# 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')
from app import app
from app import app
mod_login = something
python返回以下错误:
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”,第2行,在
从mod_登录导入mod_登录
文件“mod_login.py”,第5行,在
从应用程序导入应用程序
文件“app.py”,第2行,在
从mod_登录导入mod_登录
ImportError:无法导入名称mod\u登录
如果我从app import app中删除
,代码将正常工作,但我如何才能访问app.config
?问题是您有一个循环导入:
在app.py中
from mod_login import mod_login
在mod_login.py中
# 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')
from app import app
from app import app
mod_login = something
这在Python中是不允许的。有关更多信息,请参阅。简言之,解决办法是
- 要么把所有的东西都放在一个大文件里
- 使用本地导入延迟其中一个导入
如果您一直在处理脚本和函数,并且一直在移动它们(即更改定义的位置),这可能会意外地创建循环引用,则也会发生这种情况
如果您只需重置iPython内核以清除任何旧的分配,您可能会发现情况已得到解决:
%reset
或者菜单->重新启动终端而不是使用本地导入,您可以导入整个模块而不是特定对象。然后,在app
模块中,调用mod\u login.mod\u login
app.py
from flask import Flask
from mod_login import mod_login
app = Flask(__name__)
app.config.update(
USERNAME='admin',
PASSWORD='default'
)
from flask import Flask
import mod_login
# ...
do_stuff_with(mod_login.mod_login)
mod_login.py
# 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')
from app import app
from app import app
mod_login = something
当这是在python控制台中时,如果您更新了一个模块以便能够通过控制台使用它,并且没有帮助重置,那么您必须使用
import importlib
及
可能会解决您的问题我是Python新手,在尝试重构代码时遇到了同样的错误。在我的案例中,错误的原因有点不同
我的代码写在一个文件中,我正在将其重新组织为模块。在将代码分组到模块中并尝试从run.py
运行flask服务器后,我遇到了错误。我尝试了这里给出的解决方案,但对我无效
然后我注意到我有两个不同的\uuuu pycache\uuuu
目录,一个在我的包内(在附加的代码片段中命名为src
),另一个在包外。当我删除包外的\uuuu pycache\uuuu
目录时,错误被清除,我可以运行flask服务器
|- __pycache__/ #deleting this directory solved it for me
|- src
|- __pycache__/
|- __init__.py
|- static/
|- templates
…
希望这会有帮助。如果您只需尝试从mod_login import*
和从app import*导入可能重复@Sebastian谢谢-这是一个节省!我没有看到循环引用,但仍然得到上述错误。使用*
有帮助。“我不知道这是什么逻辑。”塞巴斯蒂安,我说得太快了。没用。当我尝试使用该类时,它找不到它,并给出导入错误。我知道没有循环导入,也尝试过删除所有*.pyc文件。不知道丢失了什么这是将导入移到本地范围的一个很好的解决方案。它不需要对代码进行大量重构,而且可以很快完成。有没有其他原因导致这种情况发生?“无法导入名称X”谢谢。在我的公司,我们构建python,但它也只是在没有构建的情况下工作,除非我像你说的那样重命名了所有文件。所以这让我想到实际重建,这解决了问题。呜呼!在我的例子中,我将一个python脚本重构成不同的模块,留下一些旧的.py和.pyc文件,并偶然发现了“cannotimportname”错误。在对循环引用进行了无用的搜索之后,你的回答让我走上了正确的道路——删除旧文件就成功了。谢天谢地指出这是一个救命恩人。我没有一个循环的参考,对于为什么会发生这种情况,我完全感到困惑。