如何从python site-package强制导入lib?

时间:2014-09-16 09:42:34

标签: 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中使用芹菜。

但是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_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,每次开始芹菜工作时都必须输入此名称。

如何强制从python site-package导入lib?还是有另一种方法可以开始芹菜吗?

1 个答案:

答案 0 :(得分:1)

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

from __future__ import absolute_import

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

import celery

将导入已安装的芹菜包而不是此模块。