web-dev-qa-db-de.com

ImportError: Name kann nicht importiert werden

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?

20
Patrick Burns

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

  • sammeln Sie entweder alles in einer großen Datei
  • verzögern Sie einen Import mit dem lokalen Import
36
hivert

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

13
mjp

Anstatt lokale Importe zu verwenden, können Sie anstelle des jeweiligen Objekts das gesamte Modul importieren. Rufen Sie dann in Ihrem Modul appmod_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
2
Jivan

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

1

Ähnlich wie bei @ mjp wurde mein Problem gelöst, nachdem alle .pyc-Dateien gelöscht wurden.

0