我有两个文件app.py
和mod_login.py
app.py
from flask import Flask
from mod_login import mod_login
app = Flask(__name__)
app.config.update(
USERNAME='admin',
PASSWORD='default'
)
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')
并且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
如果我删除from app import app
,代码将有效,但我如何才能访问app.config
?
答案 0 :(得分:36)
问题是你有一个循环导入: 在app.py
from mod_login import mod_login
mod_login.py中的
from app import app
Python中不允许这样做。有关详细信息,请参阅Circular import dependency in Python。简而言之,解决方案是
答案 1 :(得分:15)
如果您一直在处理脚本和功能并且一直在移动它们(即更改了定义的位置),这可能会发生,这可能会意外地创建循环引用。
如果您只是重置iPython核心以清除任何旧任务,您可能会发现情况已解决:
%reset
或menu-&gt;重新启动终端
答案 2 :(得分:2)
您可以导入整个模块而不是特定对象,而不是使用本地导入。然后,在app
模块中,致电mod_login.mod_login
app.py
from flask import Flask
import mod_login
# ...
do_stuff_with(mod_login.mod_login)
mod_login.py
from app import app
mod_login = something
答案 3 :(得分:1)
在python控制台中,如果您更新模块以使其能够通过控制台使用而无助于重置,则必须使用
import importlib
和
importlib.reload (*module*)
可能会解决您的问题
答案 4 :(得分:0)
类似于@mjp的答案,删除所有.pyc文件后,我的问题已解决。
答案 5 :(得分:0)
我是 Python 新手,在尝试重构我的代码时遇到了同样的错误。在我的情况下,错误的原因有点不同。
我的代码写在一个文件中,我正在将它重新组织成模块。在将我的代码分组到模块中并尝试从 run.py
运行 Flask 服务器后,我收到了错误消息。我尝试了此处给出的解决方案,但对我不起作用。
然后我注意到我有 2 个不同的 __pycache__
目录——一个在我的包内(在附加的代码段中命名为 src
),另一个在包外。当我删除包外的 __pycache__
目录时,错误清除,我可以运行 Flask 服务器。
|- __pycache__/ #deleting this directory solved it for me
|- src
|- __pycache__/
|- __init__.py
|- static/
|- templates
…
希望对您有所帮助。