通过Elastic Beanstalk部署Django应用出现ModuleNotFoundError如何解决
问题排查方案
根因1:配置命名空间不匹配当前EB平台版本
你使用的aws:elasticbeanstalk:container:python是Amazon Linux 1版本EB Python平台的配置命名空间,你部署用的Amazon Linux 2平台已经更换了配置项规则,请将01_python.config内容修改为如下:
option_settings: "aws:elasticbeanstalk:application:environment": DJANGO_SETTINGS_MODULE: "django3.settings" PYTHONPATH: "/var/app/current:$PYTHONPATH" "wsgi": WSGIPath: "django3.wsgi:application"
部分Amazon Linux 2平台版本也支持用proxy命名空间配置文件路径,格式如下:
option_settings: "aws:elasticbeanstalk:application:environment": DJANGO_SETTINGS_MODULE: "django3.settings" PYTHONPATH: "/var/app/current:$PYTHONPATH" "aws:elasticbeanstalk:environment:proxy": WSGIPath: "django3/wsgi.py"
根因2:应用打包路径错误
执行部署前确认你是在**外层django3目录(包含manage.py的目录)**下直接执行打包/eb deploy命令,不要将外层django3目录作为子目录打包进压缩包。
正确的zip包根目录结构应该直接包含:
- manage.py
- requirements.txt
- .ebextensions 文件夹
- 内层django3 文件夹
如果打包后根目录只有一个django3文件夹,会导致EB读取路径错位,触发模块找不到错误。
根因3:配置文件格式非法
确认01_python.config为合法YAML格式:
- 全部用空格缩进,禁止使用tab
- 缩进层级严格对应,没有多余的末尾空格
- 字符串引号配对正确
根因4:wsgi模块导出错误
检查内层django3目录下的wsgi.py文件,确认存在可被全局导入的application对象,默认正确内容如下:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django3.settings') application = get_wsgi_application()
修改对应问题后重新部署即可解决报错。
内容的提问来源于stack exchange,提问作者Anton Barash
相关产品推荐
相关产品推荐

