VPS部署Django时Celery与Gunicorn冲突:无法导入Celery
Django + Gunicorn启动时Celery导入错误解决指南
问题详情
执行命令 gunicorn project.wsgi 启动Django项目时,触发以下Celery导入错误:
[2024-03-17 08:39:59 -0400] [12173] [INFO] Starting gunicorn 20.0.4 [2024-03-17 08:39:59 -0400] [12173] [INFO] Listening at: http://127.0.0.1:8000 (12173) [2024-03-17 08:39:59 -0400] [12173] [INFO] Using worker: sync [2024-03-17 08:39:59 -0400] [12176] [INFO] Booting worker with pid: 12176 [2024-03-17 08:39:59 -0400] [12176] [ERROR] Exception in worker process Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker worker.init_process() File "/usr/lib/python3.7/site-packages/gunicorn/workers/base.py", line 119, in init_process self.load_wsgi() File "/usr/lib/python3.7/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi self.wsgi = self.app.wsgi() File "/usr/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/usr/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load return self.load_wsgiapp() File "/usr/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp return util.import_app(self.app_uri) File "/usr/lib/python3.7/site-packages/gunicorn/util.py", line 358, in import_app mod = importlib.import_module(module) File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/root/reg_project/registration/project/__init__.py", line 2, in <module> from .celery import app as celery_app File "/root/reg_project/registration/project/celery.py", line 3, in <module> from celery import Celery ImportError: cannot import name 'Celery' from 'celery' (/usr/lib/python3.7/site-packages/celery/__init__.py) [2024-03-17 08:39:59 -0400] [12176] [INFO] Worker exiting (pid: 12176) [2024-03-17 08:39:59 -0400] [12173] [INFO] Shutting down: Master [2024-03-17 08:39:59 -0400] [12173] [INFO] Reason: Worker failed to boot.
项目根目录下的__init__.py代码:
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ['celery_app']
已激活虚拟环境,安装了所有依赖,Celery版本为4.4.7,Gunicorn已安装。
解决步骤
1. 确认虚拟环境激活状态
系统可能默认使用全局Python环境,执行以下命令验证:
which python pip list | grep celery
- 确保
which python输出的路径指向虚拟环境内的Python可执行文件 pip list显示的Celery版本应为4.4.7
如果不符,重新激活虚拟环境:
# 替换为你的虚拟环境目录路径 source venv/bin/activate
2. 重新安装Celery
虚拟环境内的Celery包可能损坏或安装不完整,执行卸载重装:
pip uninstall celery -y pip install celery==4.4.7
3. 修复同名文件冲突
项目内的celery.py文件会与第三方Celery库的包名冲突,导致Python优先导入本地文件而非系统库:
- 将项目中的
celery.py重命名为celery_app.py - 修改
__init__.py中的导入语句:
from __future__ import absolute_import, unicode_literals from .celery_app import app as celery_app __all__ = ['celery_app']
4. 指定虚拟环境的Python启动Gunicorn
确保Gunicorn使用虚拟环境内的解释器,避免全局环境干扰:
# 激活虚拟环境后执行 python -m gunicorn project.wsgi
内容的提问来源于stack exchange,提问作者Barbod Imani
相关产品推荐
相关产品推荐

