Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从芹菜中导入当前的应用程序为ValueError:尝试了超出顶级包的相对导入_Python_Django_Celery_Django Celery_Celerybeat - Fatal编程技术网

Python 从芹菜中导入当前的应用程序为ValueError:尝试了超出顶级包的相对导入

Python 从芹菜中导入当前的应用程序为ValueError:尝试了超出顶级包的相对导入,python,django,celery,django-celery,celerybeat,Python,Django,Celery,Django Celery,Celerybeat,是的,我知道有很多关于堆栈溢出的类似问题与这个值错误有关,我尝试了它们的所有解决方案,但由于我是Django和python新手,所以无法解决这个问题 我有一个名为my_backend的项目,它具有以下文件结构 main_project/ cmb_backend/ __init__.py celery.py urls.py second_app/ __init__.py moduleZ.py my

是的,我知道有很多关于堆栈溢出的类似问题与这个值错误有关,我尝试了它们的所有解决方案,但由于我是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_后端中添加了一个芹菜.py文件

我还使用pip安装了django_Cellery_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时,它正在从芹菜中导入当前的应用程序,但它在错误的文件中查找

所以为了解决这个错误,我使用相对导入和添加。。在import语句前面,但仍然不起作用

# admin.py file in the django_celery_beat lib
from ..celery import current_app
from ..celery.utils import cached_property
现在我得到的是
ValueError:试图在顶级包之外进行相对导入

我尝试了一些系统路径黑客,但我的坏,我仍然被困在这里

我还检查了所有这些问题,并尝试了那里提供的解决方案


您的错误可能与
芹菜有关。您的
PYTHONPATH
中没有包含当前的应用程序。确保满足以下两项要求:

  • 确保
    芹菜。当前的应用程序包安装在你的
    PYTHONPATH
  • 如果您使用的是虚拟环境,请确保已安装芹菜并激活您的虚拟环境

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

    我已经在下面的命令中添加了应用程序名称,它现在正在工作

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

    感谢您的回复,让我试试您的解决方案,然后再回复youNope,仍然是同一个问题,如果我只是重命名我的custom celery.py文件并执行相同的命令,一切正常。问题是,当python尝试在admin.py文件中加载模块时,它正在查看我的自定义芹菜.py文件,而不是env/lib/celery模块。为什么选择将文件命名为
    celery.py
    ?这是混乱的,不安全。是的,我知道这一点,我是按照这个网站的芹菜安装,所以我用了它。添加芹菜任务的常用方法是命名
    tasks.py
    。看他们的官方教程