Sat*_*rik 12 python django rabbitmq celery
ImportError:无法从“celery”导入名称“Celery”
该代码在我的本地计算机上运行良好。当我在天蓝色服务器上运行此代码时,会创建此问题。
我还将celery.py文件重命名为celeryy.py文件,然后检查错误仍然相同。
下面是我的项目文件结构,如下截图所示。
__init__.py文件:
from __future__ import absolute_import
from core.celery import app as celery_app
__all__ = ['celery_app']
Run Code Online (Sandbox Code Playgroud)
celery.py文件:
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
app = Celery('core')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
Run Code Online (Sandbox Code Playgroud)
task.py文件:
from celery import shared_task
from time import sleep
from azure.datalake.store import core, lib, multithread
from django.core.mail import send_mail
token = lib.auth()
adls_client = core.AzureDLFileSystem(token, store_name='bnlweda04d3232gsdfs')
@shared_task
def sleepy(duration):
sleep(duration)
return None
@shared_task
def send_email_task(subject,message,from_email,recipient_email,fail_silently):
sleep(30)
send_mail(
subject,message,from_email,recipient_email,fail_silently
)
return 'Mail sent success'
Run Code Online (Sandbox Code Playgroud)
我正在使用 celery 版本:4.4.0和 python 版本:3.8.10
Ulm*_*Ulm 24
我遇到了与您描述的完全相同的问题,并且它最近才开始发生(CI 在 2022 年 10 月 3 日失败,但在 2022 年 9 月 25 日工作正常,其间没有相关更改)。
最终的原因是在我的 CI 中,importlib-metadata开始安装 version 5.0.0,这给出了错误(与 一起工作得很好4.12.0)。
为了暂时修复它,我只是添加importlib-metadata==4.13.0到我的environment.yml 文件中,之后问题就解决了。
简短的答案:
你的问题是你已经命名了一个子模块(又名Python文件)或一个包(又名文件夹),其名称与你想要导入的包的名称相同,celery因此你需要更改它的名称文件以便导入正确的包。
更多详细信息:
Python 导入模块检查sys.path. 所以如果你打印了
print(sys.path)
Run Code Online (Sandbox Code Playgroud)
您将获得一个路径列表,解释器将在其中开始以相同的顺序搜索包名称,第一个路径是您当前的目录路径,因此一旦它在当前工作目录中找到它,它将导入它并且不会'继续寻找。
有关更多详细信息,您可以从此处阅读文档