是的,我知道有很多与此值错误相关的堆栈溢出的类似问题,我尝试了它们的所有解决方案,但由于我是 Django 和 python 的新手,我无法解决这个问题。
我有一个名为my_backend的项目,它具有以下文件结构。
main_project/
cmb_backend/
__init__.py
celery.py
urls.py
second_app/
__init__.py
moduleZ.py
my_env/
bin/
include/
lib/
python 3.7/
site-packages/
celery/
django_celery_beat
admin.py
我已将芹菜用于定期任务,因此我在主应用程序my_backend中添加了一个 celery.py 文件。
我还使用 pip 安装了django_celery_beat,在其中,他们使用以下代码导入了芹菜。
# admin.py file in the django_celery_beat lib
from celery import current_app
from celery.utils import cached_property
所以当我运行这个命令时
python3 my_backend/setup_database.py
它给了我一个错误,例如
ImportError: cannot import name 'current_app' from 'celery' (/Users/pankaj/Desktop/Pankaj/MyJangoProjects/My_Project/my_backend/celery.py)
所以从这个错误中,我发现当我运行上面的命令时 admin.py 正在从芹菜导入current_app,但它正在查找错误的文件
所以为了解决这个错误,我正在使用相对导入并在导入语句前面添加..,但它仍然不起作用
# admin.py file in the django_celery_beat lib
from ..celery import current_app
from ..celery.utils import cached_property
现在我来了ValueError: attempted relative import beyond top-level package
我已经尝试了一些sys.path黑客,但我的错,我仍然被困在这里。
我还检查了所有这些问题并尝试了那里提供的解决方案。
超出相对导入中的顶级包错误
同级包导入
相对进口量达到第十亿次
如何在 Python 中进行相对导入?
尝试在顶级包之外进行相对导入?
您的错误可能与celery.current_app
有关,该错误在某种程度上未包含在您的PYTHONPATH
中。确保满足以下两项:
- 确保
celery.current_app
软件包安装在PYTHONPATH
下的某个位置。 - 如果您使用的是虚拟环境,请确保已安装芹菜并激活虚拟环境。
我找到了这个问题的解决方案。正如我提到的,问题是我的主应用程序中文件的名称相同,因为当我运行时文件名 celery.py django_celery_beat它正在我的自定义 celery.py 文件中查找current_app,所以我已按照@cagrias的建议将文件名更改为my_task.py。
我已经在以下命令中附加了应用程序名称,它现在可以工作了。
celery -A my_backend.task worker --loglevel=info