Python中Django项目中的celery.py文件无法导入from celery import Celery的解决方法

根着官网的 demo 创建了celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

但是 pycharm 提示 unresoloved reference Celery

这是怎么回事呢


Python中Django项目中的celery.py文件无法导入from celery import Celery的解决方法

9 回复

面向谷歌编程了解一下


这个问题我遇到过,通常是因为环境配置或导入路径的问题。

首先检查你的celery版本是否正确安装:

pip install celery

如果已经安装,最常见的问题是celery.py文件位置和导入冲突。Django项目结构应该是这样的:

your_project/
├── your_project/
│   ├── __init__.py
│   ├── celery.py      # 你的celery配置文件
│   ├── settings.py
│   └── urls.py
└── manage.py

your_project/__init__.py中需要添加:

from .celery import app as celery_app

__all__ = ('celery_app',)

celery.py中的标准配置应该是:

import os
from celery import Celery

# 设置Django的默认设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')

app = Celery('your_project')

# 使用Django的设置文件配置Celery
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务
app.autodiscover_tasks()

如果还是报错,可能是Python路径问题。尝试在命令行中测试:

python -c "from celery import Celery; print('导入成功')"

如果这个测试失败,说明celery包没有正确安装。使用pip list | grep celery检查是否安装。

另一个常见坑:确保你的文件不叫celery.py以外的名字,且不要有同名的celery模块在PYTHONPATH中。

总结:检查安装和文件结构。

你的模块叫 celery,官方库也叫 celery

你创建的文件名不能和要 import 的重名,不然会 import 到自己
我第一次用 tornado 就是这样的🌚


官方 demo 说 from future import absolute_import 这样就能避免本地的 celery.py 和 celery 库冲突
但是依然冲突了。
我贴的代码就是官方给的例子

打开 pycharm 设置,里面的解释器选项,确认 celery 模块已经别加载了。

不太明白你在 django 的目录中,为什么要新建一个 celery.py
我不建议这么做。你只需要新建一个 tasks.py ,里面写上你的任务。

然后在 Django 的 setting.py 中配置 celery 的参数,(当然,如果你嫌麻烦,你可以新建一个单独的 celery 配置模块,比如名字叫 celeryconfig.py),这里面需要配置后端数据库,定时任务的时间,配合 djcelery 是最完美的。

建议参考下文章:
http://www.mamicode.com/info-detail-2278246.html
(网上搜的,打开居然一看,转载了我的)

不嫌麻烦就新建一个 celery 的配置文件,不要取与 celery 重名。
想偷懒的话,按照上面的博文去操作即可。
所有的配置都撸在 settings.py 里面。简简单单,逻辑清晰,代码也不算混乱。

回到顶部