You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Flask项目报NameError: name 'model' is not defined如何解决

Heroku部署Flask应用时NameError: name 'model' is not defined问题解析

错误核心原因

你写的导入逻辑和调用逻辑不匹配:

  • 当前使用的导入语句是from model import *,该语法的实际效果是将model.py内的所有公开函数、类、变量直接导入到app.py的全局命名空间,不会把model.py本身作为一个名为model的可引用模块对象存入当前命名空间
  • 你的业务代码采用model.get_notes()的形式调用方法,本质是要求解释器查找名为model的模块实体并调用其内部方法,但现有导入逻辑根本没有创建这个名称的模块引用,因此解释器执行到该行代码时无法识别model,直接触发NameError
  • 本地运行正常、Heroku环境报错的差异来源:本地环境可能存在Python导入缓存、历史导入残留的兼容状态,让代码误打误撞跑通;但Heroku是完全隔离的全新运行环境,会严格按照Python语法规则解析导入逻辑,没有缓存机制“打补丁”,直接暴露导入和调用不匹配的问题

修正方案

  • 最适配现有调用逻辑的改法:将model.py的导入语句替换为import model,原有带model.前缀的业务代码不需要做任何修改即可正常运行
  • 若坚持使用from model import *的导入形式,需要将业务代码中所有带model.前缀的调用去掉前缀,比如把model.get_notes()改为直接调用get_notes()——因为模块内的对象已经直接导入到当前文件命名空间下,不需要再加模块名做标识
  • 你当前配置的Procfile内容本身没有问题,web: gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app是适配Gevent WebSocket Worker的gunicorn启动逻辑,和本次报错无关联

内容的提问来源于stack exchange,提问作者Denis Ladoshkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 12:45:05