Celery启动worker报错ModuleNotFoundError: No module named 'mysite'
报错根因
错误栈最终抛出ModuleNotFoundError: No module named 'mysite',核心原因是Celery初始化时加载Django配置的路径配置错误,指向了不存在的mysite项目,而你实际的项目名为myproject,导致模块导入失败。
排查思路
- 从错误栈定位故障阶段:错误发生在Django初始化加载settings配置环节,和RabbitMQ连接、任务代码逻辑无关,优先排查Celery实例的初始化配置、Django settings模块路径配置
- 检查项目根目录下
myproject/celery.py(Celery实例初始化文件,你未提供该文件内容,是故障高发点)中DJANGO_SETTINGS_MODULE的取值是否正确 - 检查启动环境是否有残留的旧配置:包括系统环境变量、虚拟环境激活脚本、项目env文件中是否错误配置了
DJANGO_SETTINGS_MODULE=mysite.settings - 检查Celery启动时的工作目录:确认执行启动命令的路径是包含
manage.py的项目根目录,而非其他层级目录
修复步骤
- 修正/补全
myproject/celery.py配置
该文件是Celery的核心初始化文件,必须正确指定Django配置路径,参考正确配置如下:import os from celery import Celery # 关键:指定Django settings模块路径为实际项目名myproject,禁止写不存在的mysite os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') app = Celery('myproject') # 从Django settings中读取所有以CELERY开头的配置项 app.config_from_object('django.conf:settings', namespace='CELERY') # 自动发现所有已注册Django app下的tasks.py任务 app.autodiscover_tasks() - 校验
myproject/__init__.py配置
你当前提供的该文件配置正确,无需修改,保持如下内容即可:from .celery import app as celery_app __all__ = ('celery_app',) - 清理环境残留配置
- 全局搜索项目部署环境中所有
DJANGO_SETTINGS_MODULE相关配置,将指向mysite.settings的项全部修改为myproject.settings - 切换到包含
manage.py的项目根目录下再执行Celery启动命令
- 全局搜索项目部署环境中所有
- 前置依赖校验
你配置了CELERY_RESULT_BACKEND = 'django-db',启动前需要先完成对应配置:
把# 先安装依赖 pip install django-celery-resultsdjango_celery_results加到settings.py的INSTALLED_APPS列表中,再执行数据库迁移生成结果存储表:python manage.py migrate - 启动验证
执行启动命令celery -A myproject worker -l info,看到Celery启动日志中正常打印RabbitMQ连接信息、已注册任务列表包含app.tasks.send_email_task,即为修复成功。
补充:你提供的邮件任务代码逻辑无语法问题,修复启动故障后即可正常调用。
内容的提问来源于stack exchange,提问作者Himanshu Poddar
相关产品推荐
相关产品推荐

