J'ai deux fichiers app.py
et 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')
Et python retourne cette erreur:
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
Si je supprime from app import app
, le code fonctionnera, mais comment puis-je accéder à app.config
?
Le problème est que vous avez une importation circulaire: In app.py
from mod_login import mod_login
dans mod_login.py
from app import app
Ceci n'est pas autorisé en Python. Voir Dépendance à l'importation circulaire en Python pour plus d'informations. En bref, les solutions sont
Cela peut aussi arriver si vous avez travaillé sur vos scripts et vos fonctions et que vous les avez déplacés (c'est-à-dire que vous avez modifié l'emplacement de la définition), ce qui aurait pu créer accidentellement une référence en boucle.
Vous constaterez peut-être que la situation est résolue si vous ne réinitialisez que l'iPython kernal pour effacer les anciennes attributions:
%reset
ou menu-> redémarrer le terminal
Au lieu d'utiliser des importations locales, vous pouvez importer l'ensemble du module au lieu de l'objet particulier. Ensuite, dans votre module app
, appelez 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
Lorsque cela est dans une console python si vous mettez à jour un module pour pouvoir l'utiliser via la console ne permet pas de réinitialiser, vous devez utiliser un
import importlib
et
importlib.reload (*module*)
susceptible de résoudre votre problème
Semblable à la réponse de @ mjp, mon problème a été résolu après la suppression de tous les fichiers .pyc.