Flask项目模块导入报错:ModuleNotFoundError问题求助
问题解决方案
你的问题主要源于Python模块导入路径配置错误,以及Flask应用启动时的上下文路径问题,以下是分步解决方法:
一、修复ModuleNotFoundError: No module named 'server'(直接运行app.py时的错误)
原因
当你直接在server目录下运行app.py时,Python会将当前目录(server)加入模块搜索路径,此时from server import app会尝试寻找名为server的模块,但实际server是你的父目录(Backend下的子目录),因此找不到该模块。
修改app.py代码
将导入语句改为相对导入,适配当前包结构:
from flask import Flask,render_template, request, make_response,jsonify import os from . import app # 从当前server包导入app from .models.player import Player # 从当前包的models子模块导入Player @app.route('/', methods=['GET', 'POST']) def index(): print('hello') return render_template('index.html') if __name__ == '__main__': app.run(debug=True, host='localhost', port=5000)
二、修复ModuleNotFoundError: No module named 'config'(执行flask run时的错误)
原因
__init__.py中app.config.from_object('config.Config')使用了绝对模块路径,但当你在Backend目录执行flask run时,Python无法直接找到server目录下的config模块,必须指定完整的模块路径。
修改__init__.py代码
- 修正配置文件的导入路径
- 优化模板目录的绝对路径(避免不同运行目录下路径错误)
- 移除可能引发循环导入的语句
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS import os # 动态获取static目录的绝对路径,适配任意运行目录 template_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'static')) app = Flask(__name__, template_folder=template_dir) # 指定完整的模块路径,确保config能被正确导入 app.config.from_object('server.config.Config') CORS(app) db = SQLAlchemy(app) from .models import player # 移除原有的import server.app,避免循环导入
三、修复player.py的导入问题
将player.py中的导入改为相对导入,确保跨运行目录时的兼容性:
from . import db # 从当前server包导入db from datetime import datetime class Player(db.Model): __tablename__ = 'player' id = db.Column(db.Integer, primary_key=True) # player id password = db.Column(db.String(255)) # password
四、正确启动应用的两种方式
方式1:直接运行app.py
- 进入
server目录,执行:python app.py - 或者进入
Backend目录,执行:python -m server.app
方式2:使用flask run
- 进入
Backend目录 - 设置FLASK_APP环境变量:
- Windows系统:
set FLASK_APP=server.app - Linux/macOS系统:
export FLASK_APP=server.app
- Windows系统:
- 启动应用:
也可以直接一步执行:flask runflask --app server.app run
内容的提问来源于stack exchange,提问作者maz32
相关产品推荐
相关产品推荐

