使用Flask部署机器学习模型时遭遇SystemExit: 1错误的技术求助
解决Flask部署机器学习模型时的SystemExit: 1错误
你遇到的SystemExit: 1问题核心原因是Spyder的IPython交互式环境与Flask Debug模式的自动重启机制冲突,同时代码里还有几个潜在问题,下面一步步帮你解决:
1. 修复Debug模式的核心冲突
Flask的debug=True会启用代码自动重载功能,但这个功能在Spyder的IPython环境下会触发退出信号(SystemExit),有两个可行的解决办法:
方法A:直接关闭Debug模式
把启动代码改成默认模式,避免自动重载触发的冲突:
if __name__ == '__main__': app.run() # 默认debug=False,无自动重载,适合在Spyder中运行
方法B:保留Debug但禁用自动重载
如果需要Debug模式的错误提示功能,只需要关闭自动重载即可:
if __name__ == '__main__': app.run(debug=True, use_reloader=False)
2. 修复变量命名冲突
你代码里用Model作为加载后的模型变量名,但之前已经导入了from tensorflow.keras.models import Model,这会覆盖Keras的Model类,容易引发后续未知错误。建议重命名模型变量:
# 原代码 Model= load_model('F:/flask/modelssk.h5') # 修改为 model = load_model('F:/flask/modelssk.h5')
同时对应的预测函数和调用处也要同步修改参数名:
def model_predict(img_path, model): img = image.load_img(img_path, target_size=(75,100,3)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) preds = model.predict(x) return preds # upload函数里的调用也要同步修改 preds = model_predict(file_path , model)
3. 确保uploads文件夹存在
你的代码会把上传的文件保存到uploads目录,但如果这个目录不存在会直接报错,建议在保存文件前先创建目录:
@app.route('/predict', methods=['GET', 'POST']) def upload(): if request.method == 'POST': f = request.files['file'] basepath = os.path.dirname(__file__) upload_folder = os.path.join(basepath, 'uploads') # 如果uploads目录不存在则自动创建 if not os.path.exists(upload_folder): os.makedirs(upload_folder) file_path = os.path.join(upload_folder, secure_filename(f.filename)) f.save(file_path) # 后续预测逻辑...
4. 验证模型路径正确性
最后再确认F:/flask/modelssk.h5这个路径是绝对正确的,模型文件确实存在,避免因为找不到模型文件导致的启动失败。
按照上面的步骤修改后,应该就能正常启动Flask应用并进行模型预测了。
内容的提问来源于stack exchange,提问作者Ahmed Sabry Tamam
相关产品推荐
相关产品推荐

