我使用自定义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中使用芹菜。
但是django-celery在celery.py
的同一目录中需要settings.py
个文件。
当runserver
时,它会引发ImportError: cannot import name Celery
,因为代码如下:
sys.path.insert(0, SRC_PATH)
sys.path.insert(0, CONF_PATH)
它导入自己!不是来自site-package,因为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
,每次开始芹菜工作时都必须输入此名称。
如何强制从python site-package导入lib?还是有另一种方法可以开始芹菜吗?
答案 0 :(得分:1)
您可以在celery.py
模块的顶部添加以及导入celery的其他模块:
from __future__ import absolute_import
默认情况下,这将使导入绝对,现在:
import celery
将导入已安装的芹菜包而不是此模块。