部署Flask应用到Elastic Beanstalk遇ModuleNotFoundError:找不到backend模块
解决Elastic Beanstalk部署Flask时的ModuleNotFoundError问题
问题原因
本地运行时,你的工作目录是包含backend文件夹的根目录,Python会自动将当前目录加入sys.path,所以能识别backend模块。但Elastic Beanstalk的运行环境中,工作路径或Python路径配置逻辑不同,导致无法找到backend作为顶层模块。
解决方案
方案1:改用相对导入修改代码
application.py本身位于backend目录下,导入同目录的configurations模块可以用相对导入替代绝对导入,更符合Python包规范:
from flask import Flask # 替换原有的 from backend import configurations from . import configurations application = Flask(__name__)
方案2:手动添加项目根目录到Python路径
如果不想修改导入逻辑,可在application.py开头添加代码,强制将项目根目录加入sys.path:
import sys import os # 获取项目根目录(backend文件夹的父目录) root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if root_dir not in sys.path: sys.path.append(root_dir) from flask import Flask from backend import configurations application = Flask(__name__)
这种方式能确保无论EB的运行路径如何,Python都能找到backend模块。
方案3:通过EB扩展配置PYTHONPATH
新建.ebextensions/python.config文件(若没有.ebextensions文件夹则先创建),添加以下配置来指定Python路径:
option_settings: "aws:elasticbeanstalk:application:environment": PYTHONPATH: "/opt/python/current/app:/opt/python/current/app/backend"
将项目根目录和backend目录都加入PYTHONPATH,确保模块能被正确识别。
内容的提问来源于stack exchange,提问作者Malice
相关产品推荐
相关产品推荐

