简体   繁体   中英

ImportError: cannot import name

I have two files app.py and 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')

And python return this error:

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

If I delete from app import app , code will be work, but how I can get access to app.config ?

The problem is that you have a circular import: in app.py

from mod_login import mod_login

in mod_login.py

from app import app

This is not permitted in Python. See Circular import dependency in Python for more info. In short, the solution are

  • either gather everything in one big file
  • delay one of the import using local import

This can also happen if you've been working on your scripts and functions and have been moving them around (ie changed the location of the definition) which could have accidentally created a looping reference.

You may find that the situation is solved if you just reset the iPython kernal to clear any old assignments:

%reset

or menu->restart terminal

Instead of using local imports, you may import the entire module instead of the particular object. Then, in your app module, call 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

与@ mjp的答案类似,我的问题在删除所有.pyc文件后得到了解决。

When this is in a python console if you update a module to be able to use it through the console does not help reset, you must use a

import importlib

and

importlib.reload (*module*)

likely to solve your problem

I'm new to Python and just encountered this same error while trying to refactor my code. The cause of the error was a bit different in my case.

My code is written in a single file and I'm reorganizing it into modules. I got the error after grouping my code into modules and trying to run the flask server from run.py . I tried the solutions given here but didn't work for me.

Then I noticed that I had 2 different __pycache__ directories-one within my package(named src in the attached snippet) and the other outside it. When I deleted the __pycache__ directory outside my package, the error cleared and I could run the flask server.

|- __pycache__/     #deleting this directory solved it for me
|-  src 
    |- __pycache__/
    |- __init__.py
    |- static/
    |- templates
    …

Hope this is helpful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM