从芹菜导入current_app会给出 ValueError:尝试在顶级包之外进行相对导入



是的,我知道有很多与此值错误相关的堆栈溢出的类似问题,我尝试了它们的所有解决方案,但由于我是 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中。确保满足以下两项:

  1. 确保celery.current_app软件包安装在PYTHONPATH下的某个位置。
  2. 如果您使用的是虚拟环境,请确保已安装芹菜并激活虚拟环境。

我找到了这个问题的解决方案。正如我提到的,问题是我的主应用程序中文件的名称相同,因为当我运行时文件名 celery.py django_celery_beat它正在我的自定义 celery.py 文件中查找current_app,所以我已按照@cagrias的建议将文件名更改为my_task.py。

我已经在以下命令中附加了应用程序名称,它现在可以工作了。

celery -A my_backend.task worker --loglevel=info

相关内容

  • 没有找到相关文章

最新更新