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

如何强制从python站点包导入库?,python,django,celery,django-celery,Python,Django,Celery,Django Celery,我正在使用自定义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')

我正在使用自定义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芹菜需要与
settings.py
位于同一目录中的
cellery.py
文件

运行服务器
时,它将引发
导入错误:无法导入名称芹菜
,因为下面的代码:

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.impropertlyconfigured:密钥设置不能为空。

目前,我知道的唯一方法是将
cellery.py
更改为
cellery\u somename.py
,每次开始芹菜作业时,我都必须键入此名称。


如何强制从python站点包导入库?或者是否有其他方法可以启动芹菜?

您可以在
芹菜.py
模块顶部添加芹菜导入模块和其他模块:

from __future__ import absolute_import
默认情况下,这将使导入成为绝对导入,现在:

import celery

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

明智的解决方案是修改您的“自定义django结构”,这样您就不必再干扰
sys.path
。@bruno desthuillers my
自定义django结构更适合部署。它可以降低部署的复杂性,这也是我公司的决定。我不能改变。这段代码也在芹菜文档中,但它不起作用。@Mithril你在其他模块中导入芹菜吗?在这些模块中是否有此
absolute\u import
语句?