我正在使用自定义的 Django 结构,如下所示:
conf
中的所有设置文件,src
中的所有应用程序
需要在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_PATH
在 site-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/