python - Django 导入搞砸了 Celery
问题描述
我有一个具有以下 Django 项目结构的 django 项目:
project/
...
some_app/
__init__.py
some_module_where_i_import_some_utils.py
server/
__init__.py
settings/
__init__.py
common.py
dev.py
...
celery.py
...
utils/
__init__.py
some_utils.py
manage.py
...
使用 utils 时,我通过以下方式导入它们:
from project.utils.some_utils import whatever
而且效果很好。但是,当我使用 celery worker 运行DJANGO_SETTINGS_MODULE=server.settings.dev celery -A server worker --beat -l info
autodiscover_tasks
失败并出现以下错误时ModuleNotFoundError: No module named 'project'
。
以下是内容server/celery.py
:
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings.prod")
app = Celery("server")
app.config_from_object("django.conf:settings", namespace="CELERY")
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print("Request: {0!r}".format(self.request))
这里是server/__init__.py
:
from .celery import app as celery_app
__all__ = ("celery_app",)
解决方案
修改celery.py
以下方式完成了这项工作:
import os
import sys
from celery import Celery
sys.path.append("..")
...
我不确定这是否会在未来引起问题,如果我想出更好的方法,我会继续调查并更新答案。
推荐阅读
- java - 如何使用 readerForUpdating().readValue 方法强制 Jackson 对象映射器忽略不完整的字段
- java - 无法传递参数apache shiro jsp sevlet
- junit - 为什么gitlab CI找不到我的junit报告神器?
- javascript - Highcharts:动态渲染颜色到系列
- c# - 在图片框上显示文本框
- tensorflow - 为什么纸箱很难被发现?
- c# - 没有默认构造函数和自动属性,怎么还能编译
- oracle - 如何找出查询的字段类型
- c++ - 如何在 Qt 中获得 QSlider 栏的位置?
- ios - UITabBarItem 图标:在 Objective-C 中添加动画