Flask应用部署到AWS ElasticBeanstalk找不到application模块如何解决
问题原因说明
平台要求加载application模块的原因
AWS Elastic Beanstalk的Python运行环境默认遵循WSGI协议启动Web服务,默认配置下会从项目根目录查找application.py模块,再从该模块中导入名为application的可调用对象作为服务入口,因此会触发对应的模块查找逻辑。
应用无法正常运行的核心问题
- WSGI入口命名不匹配:你在
application.py中定义的Flask实例名称为app,不符合Elastic Beanstalk默认要求的application命名规则,导致服务无法识别入口。 - 开发服务代码阻塞进程:代码末尾直接调用
app.run(),这是Flask本地开发服务器的启动命令,生产环境执行到该行会启动本地测试服务、阻塞后续进程,导致服务无法正常对外响应请求。 - 额外路径干扰风险:如果部署时将本地
venv虚拟环境目录一同上传,会干扰服务的模块查找路径,也可能触发模块找不到的报错。
解决方案
- 调整
application.py的入口配置,新增Flask实例别名,同时给app.run()添加执行条件,修改后的对应代码片段如下:
app=Flask(__name__) # 新增以下行,给Flask实例设置平台要求的别名 application = app # 其余业务代码保持不变 # 修改末尾的启动代码,仅在本地执行时启动开发服务器 if __name__ == '__main__': app.run()
- 在项目根目录新增
requirements.txt文件,写入所有依赖包信息,Elastic Beanstalk会自动安装该文件声明的依赖,示例内容参考:
Flask==2.0.1 Werkzeug==2.0.1
- 新增
.ebignore文件,排除不需要部署的本地文件,避免干扰模块查找路径:
venv/ __pycache__/ *.pyc *.pyo *.pyd
- 所有修改完成后执行
eb deploy重新部署即可生效。
内容的提问来源于stack exchange,提问作者Nathan Wolf
相关产品推荐
相关产品推荐

