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”错误。在对循环引用进行了无用的搜索之后,你的回答让我走上了正确的道路——删除旧文件就成功了。谢天谢地指出这是一个救命恩人。我没有一个循环的参考,对于为什么会发生这种情况,我完全感到困惑。