ImportError: невозможно импортировать имя
У меня есть два файла 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
?
Ответы
Ответ 1
Проблема в том, что у вас есть циклический импорт:
в app.py
from mod_login import mod_login
в mod_login.py
from app import app
Это не разрешено в Python. См. Циркулярная зависимость импорта в Python для получения дополнительной информации. Короче говоря, решение
- либо собрать все в одном большом файле
- Задержка одного из импорта с использованием локального импорта
Ответ 2
Это также может произойти, если вы работали над своими скриптами и функциями и перемещали их (т.е. меняли местоположение определения), которые могли случайно создать ссылку на цикл.
Вы можете обнаружить, что ситуация решена, если вы просто reset ядро iPython очистите все старые назначения:
%reset
или меню- > перезапустить терминал
Ответ 3
Вместо использования локального импорта вы можете импортировать весь модуль вместо конкретного объекта. Затем в вашем модуле 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