Heroku部署报错Failed to find attribute 'run' in 'app'问题咨询
报错排查与解决步骤
报错信息:
Failed to find attribute 'run' in 'app'
1. 优先修正Procfile启动配置
该报错90%以上是启动命令和实际文件结构不匹配导致:
- 你的
run.py存放在项目根目录(业务代码app文件夹外部),如果当前Procfile写为web: gunicorn app:run,会直接触发错误:该命令默认读取app目录下的__init__.py模块,查找其中的run属性,而非读取根目录的run.py文件。 - 按你的项目结构,正确写法分两种场景:
- 如果
run.py中定义的是服务实例(比如Flask/Django的app实例),启动命令改为web: gunicorn run:app(前半段run对应根目录的run.py模块,后半段app是你在run.py中定义的服务实例名,实例名有变动的话同步替换即可) - 如果
run.py中是通过run()函数启动服务,直接写web: python run.py即可。
- 如果
2. 检查run.py的代码逻辑
- 确认
run.py中的服务实例/run函数是模块级别的公开属性,没有被包裹在函数内部的局部作用域里。 - 不要把服务启动逻辑完全写在
if __name__ == '__main__':判断下,gunicorn不会执行该条件内的代码,仅本地调试会生效。
3. 验证模块导入规则
如果你的业务需求确实是要从app模块加载run属性,需要做两个检查:
- 确认
app文件夹下存在空白的__init__.py文件,保证Python将其识别为可导入的模块,而非普通目录。 - 确认
app/__init__.py中已经显式导出了run对象,比如添加from .xxx import run的顶层导入代码。
内容的提问来源于stack exchange,提问作者Tan Zeng Yang
相关产品推荐
相关产品推荐

