Ich habe zwei Dateien app.py
und 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')
Und Python gibt diesen Fehler zurück:
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
Wenn ich from app import app
lösche, funktioniert der Code, aber wie kann ich auf app.config
zugreifen?
Das Problem ist, dass Sie einen zirkulären Import haben: In app.py
from mod_login import mod_login
in mod_login.py
from app import app
Dies ist in Python nicht zulässig. Siehe Zirkulare Importabhängigkeit in Python für weitere Informationen. Kurz gesagt, die Lösung ist
Dies kann auch passieren, wenn Sie an Ihren Skripten und Funktionen gearbeitet haben und diese verschoben haben (d. H. Den Ort der Definition geändert haben), wodurch möglicherweise aus Versehen eine Schleifenreferenz erstellt wurde.
Sie können feststellen, dass die Situation behoben ist, wenn Sie einfach den iPYTHON-Kern zurücksetzen, um alte Zuweisungen zu löschen:
%reset
oder Menü-> Terminal neu starten
Anstatt lokale Importe zu verwenden, können Sie anstelle des jeweiligen Objekts das gesamte Modul importieren. Rufen Sie dann in Ihrem Modul app
mod_login.mod_login
auf.
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
Wenn Sie sich in einer Python-Konsole befinden, wenn Sie ein Modul aktualisieren, damit es über die Konsole verwendet werden kann, hilft das nicht beim Zurücksetzen
import importlib
und
importlib.reload (*module*)
wahrscheinlich um Ihr Problem zu lösen
Ähnlich wie bei @ mjp wurde mein Problem gelöst, nachdem alle .pyc-Dateien gelöscht wurden.