python - 如何强制从 python 站点包导入库?

标签 python django celery django-celery

我正在使用自定义的 Django 结构,如下所示:
conf 中的所有设置文件,src
中的所有应用程序 enter image description here

需要在manage.py下面使用:

if __name__ == "__main__":
    ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    SRC_PATH = os.path.join(ROOT_PATH, 'src')
    CONF_PATH = os.path.join(ROOT_PATH, 'conf')
    sys.path.insert(0, SRC_PATH)
    sys.path.insert(0, CONF_PATH)

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

而且我还需要在 django 中使用 celery。

但是 django-celery 需要一个 celery.py 文件在与 settings.py 相同的目录中。

runserver 时,它会引发 ImportError: cannot import name Celery 因为下面的代码:

sys.path.insert(0, SRC_PATH)
sys.path.insert(0, CONF_PATH)

它自己导入!不是来自站点包,因为 CONF_PATHsite-package 之前。

但是我不能把它改成

sys.path.append(SRC_PATH)
sys.path.append(CONF_PATH)

这种方式会导致 django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

目前,我知道的唯一方法是将 celery.py 更改为 celery_somename.py,每次开始 celery 作业时我都必须输入这个名称.

如何强制从 python 站点包导入库?或者还有其他方法来启动 celery 吗?

最佳答案

可以在celery.py模块和其他导入celery的模块顶部添加:

from __future__ import absolute_import

这将使导入在默认情况下是绝对的,现在:

import celery

将导入安装的 celery 包而不是这个模块。

关于python - 如何强制从 python 站点包导入库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865494/

相关文章:

Python:自动更正

python - Odoo 如何继承 Mail.Thread AbstractModel 并重写该类的函数?

python - Jupyter 是否支持 'read-only' 笔记本?

python - 在组任务完成之前, celery 链接执行子任务

python - 平衡错误率作为度量函数

python - 坚持官方 Django 教程

python - 哇 six.with_metaclass() 有用吗?

python - 如何在 django 南迁移中找出什么数据库(例如是否使用 mysql/pgsql/?)?

python - 如何在 celery 中以编程方式添加/删除 worker ?

django - 在执行之前将 Django 查询集序列化为 Celery 的 JSON