![](/img/trans.png)
[英]ValueError: attempted relative import beyond top-level package python
[英]importing current_app from celery is gives ValueError: attempted relative import beyond top-level package
是的,我知道與此值錯誤相關的堆棧溢出有很多類似的問題,我嘗試了它們的所有解決方案,但是由於我是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
我已將celery用於定期任務,因此在主應用程序my_backend中添加了一個celery.py文件。
我還使用pip安裝了django_celery_beat,在里面,他們使用以下代碼導入了celery。
# 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上面運行時,正在從celery導入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 hack,但是我很糟糕,我仍然被困在這里。
我還檢查了所有這些問題,並嘗試了在那里提供的解決方案。
您的錯誤可能與celery.current_app
有關,您的PYTHONPATH
未包含該錯誤。 確保滿足以下兩個條件:
celery.current_app
軟件包安裝在PYTHONPATH
下的某個位置。 我找到了解決此問題的方法。 正如我提到的,問題與我的主應用程序中的文件名相同,因為當我運行django_celery_beat時文件名是celery.py,它正在我的自定義celery.py文件中查找current_app,因此我已將文件名更改為my_task .py,如@cagrias所建議。
我已經在以下命令中添加了應用名稱,並且現在可以正常使用。
celery -A my_backend.task worker --loglevel=info
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.