Elastic Beanstalk中Django模块未找到ImportError问题求助
排查与解决AWS Elastic Beanstalk中Django collectstatic模块找不到的问题
核心原因
EB的container_commands默认在系统全局Python环境执行,而你的Django依赖被安装在EB自动创建的虚拟环境中,直接调用python manage.py collectstatic会无法找到虚拟环境内的包。
解决方案
1. 直接指定虚拟环境的Python路径
EB虚拟环境的典型路径为/var/app/venv/staging-LQM1lest/bin/python(路径中的随机串会随部署变化),修改.ebextensions配置文件,明确调用虚拟环境的Python执行命令:
container_commands: 01_collectstatic: command: "/var/app/venv/staging-LQM1lest/bin/python manage.py collectstatic --noinput" leader_only: true
若不确定虚拟环境路径,可通过eb ssh登录实例后执行find /var/app/venv -name python定位。
2. 激活虚拟环境后执行命令
避免硬编码路径,先激活虚拟环境再执行命令:
container_commands: 01_collectstatic: command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py collectstatic --noinput" leader_only: true env: PATH: "/var/app/venv/staging-LQM1lest/bin:$PATH"
3. 修正PYTHONPATH配置
之前的PYTHONPATH未生效,需在.ebextensions中显式配置环境变量,确保项目根目录被Python识别:
option_settings: aws:elasticbeanstalk:application:environment: PYTHONPATH: "/var/app/current:$PYTHONPATH"
确认manage.py位于/var/app/current目录下,若不在则调整PYTHONPATH到项目根路径。
4. 手动验证环境一致性
通过eb ssh登录实例,模拟container_commands的执行场景,排查问题:
# 切换到项目部署目录 cd /var/app/current # 用系统Python执行(复现错误) python manage.py collectstatic --noinput # 用虚拟环境Python执行(验证修复效果) /var/app/venv/staging-LQM1lest/bin/python manage.py collectstatic --noinput
额外排查项
- 确认
requirements.txt中包含正确版本的Django,且eb-engine日志显示依赖安装到了对应虚拟环境。 - 检查
.ebextensions配置文件是否存在语法错误,可通过eb deploy时的日志确认加载状态。
内容的提问来源于stack exchange,提问作者paaaaaaaaaaaaaaaaaaaaa
相关产品推荐
相关产品推荐

