简体   繁体   中英

Flask ImportError: cannot import name (for app in __init__.py)

I'm new to flask, and REST-APIs / server side scripting in general. I get the error "ImportError: cannot import name 'flask_app'" when I try executing run_app.py

This is my dir structure.

my_project
        - webapp
              - __init__.py
              - helpers.py
              - c_data.py 

        - run_app.py

Contents of each file:

__init__.py

"""This is init module."""

from flask import Flask
from webapp import c_data

# Place where webapp is defined
flask_app = Flask(__name__)

c_data.py

"""This module will serve the api request."""

from app_config import client
from webapp import flask_app
from webapp import helpers
from flask import request, jsonify

# Select the database
db = client.newDB
# Select the collection
collection = db.collection


@flask_app.route("/")
def get_initial_response():
    """Welcome message for the API."""
    # Message to the user
    message = {
        'apiVersion': 'v1.0',
        'status': '200',
        'message': 'Welcome to the Flask API'
    }
    # Making the message looks good
    resp = jsonify(message)
    # Returning the object
    return resp

run_app.py

# -*- coding: utf-8 -*-

from webapp import flask_app

if __name__ == '__main__':
    # Running webapp in debug mode
    flask_app.run(debug=True)

What am I doing wrong?

It is because you import c_data in init .py, this makes recursive import To be clearer, you import c_data and define flask_app inside __init__ , but later than c_data you import flask_app which is not defined yet.

from webapp import c_data # Remove it, it makes recursive import

# Place where webapp is defined
flask_app = Flask(__name__)


Try to remove it. Or change the way to import c_data.

Possible solution, change your run_app.py Remember to remove from webapp import c_data in __init__.py


from webapp import flask_app
from webapp import c_data  # New import

if __name__ == '__main__':
    # Running webapp in debug mode
    flask_app.run(debug=True)

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