部署Django项目到AWS EB时出现ModuleNotFoundError错误
问题描述
将Python 3.8版本的Django项目部署到Amazon Linux 2/3.4.2 64位Elastic Beanstalk环境时,日志持续报错ModuleNotFoundError: No module named 'application'。
最初使用的.ebextensions/django.config配置:
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: pos.wsgi:application aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: pos.settings
修改为以下配置后问题仍未解决:
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: pos/wsgi.py
排查与解决方案
验证项目目录结构
确保pos目录是合法Python包(目录内存在__init__.py文件),且wsgi.py确实位于pos目录下。Elastic Beanstalk的Python容器依赖正确的包结构识别WSGI应用。确认WSGIPath格式与工作目录
Amazon Linux 2环境下,WSGIPath正确格式应为<module>.wsgi:application。需确认Elastic Beanstalk的工作目录指向项目根目录(即pos目录所在的层级)。若部署包存在嵌套目录问题(比如将项目文件夹作为子目录打包),会导致模块无法被找到,需调整部署包结构,直接将项目根目录下的所有文件(含pos、requirements.txt等)打包上传。配置PYTHONPATH环境变量
若Python的sys.path未包含项目根目录,可通过.ebextensions配置添加PYTHONPATH指定路径,示例配置:
option_settings: aws:elasticbeanstalk:application:environment: PYTHONPATH: "/opt/python/current/app" DJANGO_SETTINGS_MODULE: pos.settings aws:elasticbeanstalk:container:python: WSGIPath: pos.wsgi:application
查看完整日志定位问题
查看EB控制台的完整日志或服务器上的/var/log/httpd/error_log文件,确认模块查找路径是否正确,排查是否存在其他依赖缺失或路径配置错误。使用EB CLI生成配置
若手动配置容易出错,可使用Elastic Beanstalk CLI初始化项目,工具会自动生成适配环境的正确配置文件,避免路径类问题。
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan

