Flask项目无法从config.py导入app和db的问题求助
问题描述
项目结构:
- backend
- main.py
- models.py
- config.py
config.py 代码:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS app = Flask(__name__) CORS(app) app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///mydatabase.db" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False db = SQLAlchemy(app)
main.py 代码:
from flask import request, jsonify from config import app,db from models import Contact @app.route("/contacts", methods =["GET"]) def get_contacts(): contacts = Contact.query.all() json_contacts = list(map(lambda x: x.to_json(), contacts)) return jsonify({"contacts": json_contacts}) if __name__ == "__main__": with app.app_context(): db.create_all() app.run(debug = True)
运行main.py时触发错误:
Traceback (most recent call last): File "c:\Users\Nicov\Uni\FlaskDemo\backend\main.py", line 2, in <module> from config import app,db ImportError: cannot import name 'app' from 'config' (c:\Users\Nicov\Uni\FlaskDemo\backend\config.py)
尝试使用相对路径from .config import app,db仍未解决问题。
解决方案
以下是几种可行的排查与修复方法:
- 将backend目录标记为Python包
在backend目录下创建空的__init__.py文件,让Python识别该目录为可导入的包。之后在main.py中使用相对导入:
from .config import app, db
注意:需从backend的父目录运行脚本,或把backend目录添加到Python搜索路径中。
- 手动添加路径到Python搜索列表
在main.py最顶部插入代码,将当前脚本所在目录加入Python模块搜索路径:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent))
之后即可正常使用from config import app, db进行导入。
- 排查循环导入问题
检查models.py是否也导入了config中的app或db,若存在双向导入会导致加载失败。可调整models.py的导入逻辑:
- 避免在文件顶部直接导入db,改为在函数内部延迟导入;
- 确保models.py的导入语句在config完成初始化之后执行。
- 修正脚本运行方式
确保在backend目录下执行main.py,比如命令行中:
cd c:\Users\Nicov\Uni\FlaskDemo\backend python main.py
若使用IDE运行,需检查IDE的工作目录是否设置为backend文件夹。
内容的提问来源于stack exchange,提问作者Nico Vogel
相关产品推荐
相关产品推荐

