Ubuntu20.04服务器出现ModuleNotFoundError: No module named 'celery'错误求助
问题分析与解决方案
核心矛盾
报错显示ModuleNotFoundError: No module named 'celery',但任务最终执行成功,说明主进程/Worker初始化时存在环境不匹配问题,但实际执行任务的环境是正常的,大概率是Supervisor配置的Python环境和项目虚拟环境不一致导致的。
解决步骤
1. 确认项目虚拟环境路径
找到Django项目使用的虚拟环境位置,比如用venv创建的环境路径可能是/home/toch/outdoorsy/venv。在项目目录下执行命令查看:
echo $VIRTUAL_ENV
2. 修改Supervisor的Celery配置文件
找到Supervisor中Celery的配置文件(通常在/etc/supervisor/conf.d/目录下,比如celery.conf),确保启动命令使用项目虚拟环境的Python解释器,而非系统默认Python。
原错误配置示例:
command=celery -A core worker -l info
修改为使用虚拟环境的Celery命令:
command=/home/toch/outdoorsy/venv/bin/celery -A core worker -l info
或者先激活虚拟环境再启动:
command=/bin/bash -c "source /home/toch/outdoorsy/venv/bin/activate && celery -A core worker -l info"
3. 重启Supervisor与Celery进程
执行命令更新配置并重启服务:
supervisorctl reread supervisorctl update supervisorctl restart celery
4. 验证环境一致性
- 查看Celery进程PID,检查其运行环境的PATH:
ps aux | grep celery # 替换下方PID为实际进程号 cat /proc/PID/environ | tr '\0' '\n' | grep PATH
- 确认虚拟环境中已安装Celery:
/home/toch/outdoorsy/venv/bin/pip list | grep celery
5. 其他排查方向
- 若近期更新过依赖,重新安装项目依赖:
/home/toch/outdoorsy/venv/bin/pip install -r requirements.txt - 检查
core/__init__.py和celery_config.py的导入路径是否存在错误 - 确认Supervisor配置中
user字段对应的用户,拥有项目目录和虚拟环境的访问权限
内容的提问来源于stack exchange,提问作者Onyilimba
相关产品推荐
相关产品推荐

