将Flask应用部署到AWS Elastic Beanstalk时遇WSGIPath文件不存在错误
我帮你梳理几个大概率能解决问题的排查方向,都是部署EB时踩过的坑:
确认WSGI路径配置:EB的Python容器默认会找根目录下
application.py里的application对象,但有时候得明确指定。检查你的.ebextensions配置文件,确保aws:elasticbeanstalk:container:python节点下的WSGIPath设置为application.py。如果之前只改了文件名但没在配置里明确,EB可能没正确识别到入口文件。核对依赖包清单:本地运行正常但部署失败,十有八九是依赖没对齐。一定要确保根目录下的
requirements.txt包含了生产环境需要的所有包——比如Flask本身,还有你用到的其他库。可以在本地用pip freeze > requirements.txt生成,但记得剔除pytest这类开发专属包;或者用pipreqs工具生成更精准的依赖列表。查看EB的详细日志:这是定位问题的核心!登录AWS控制台进入你的EB环境,找到「日志」选项,下载完整日志或者实时查看。重点看
/var/log/httpd/error_log(Web服务器错误日志)和/var/log/web.stdout.log(应用输出日志),里面会有具体报错信息:比如是找不到Flask模块(说明依赖没装对),还是提示module 'application' has no attribute 'application'(说明你的application.py里的Flask实例名不对,得是application = Flask(__name__))。检查项目文件结构:确保
application.py在项目根目录下,没有嵌套在子文件夹里。EB会从根目录开始查找指定的WSGI文件,如果你的app在子目录,得修改WSGIPath为子文件夹名/application.py,或者调整文件结构把主文件移到根目录。本地模拟EB环境调试:用AWS EB CLI的
eb local run命令在本地模拟EB的运行环境,这样能快速排查是不是环境变量、路径或者权限的问题。运行后如果本地也出现同样报错,就能在本地直接调试,不用反复推送到EB。核对环境变量配置:如果你的Flask应用依赖环境变量(比如数据库连接字符串、SECRET_KEY),要确保在EB的「配置」→「软件」里设置了这些变量,或者在
.ebextensions里添加配置文件来注入。本地的.env文件EB不会自动读取,必须手动配置到环境里。
内容的提问来源于stack exchange,提问作者Patrick Harris

