python module_error ai_generated true

ImportError: cannot import name 'app' from partially initialized module 'myapp' (most likely due to a circular import)

ID: python/flask-import-error-circular

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
0Evidence
2024-03-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
3.x active

Root Cause

Circular imports between Flask application modules, often when views.py imports from app.py and app.py also imports from views.py at module level.

generic

中文

Flask应用模块之间的循环导入,常见于views.py从app.py导入,同时app.py也在模块级别从views.py导入。

Workarounds

  1. 90% success Use lazy imports inside functions or request handlers
    def create_app():
        from myapp.views import some_view
        app.register_blueprint(some_view)
        return app
  2. 85% success Refactor to use Flask application factory pattern
    # app.py
    def create_app():
        app = Flask(__name__)
        with app.app_context():
            from . import views
            app.register_blueprint(views.bp)
        return app

Dead Ends

Common approaches that don't work:

  1. Moving all imports to the top of each file without restructuring 95% fail

    Doesn't break the cycle; Python still tries to initialize both modules simultaneously.

  2. Using 'from myapp import app' inside a function without lazy loading 70% fail

    If the function is called during module initialization, the cycle persists.