Python相对导入错误?

时间:2016-02-29 21:37:53

标签: python django import package

ı有一个django项目,我需要访问django主项目文件夹下我文件夹中的一些模型。让我说明一下。

    src\
        main\
            urls.py
            models.py
            view.py
        lib\
            __init__.py
            helper.py

这是示例文件夹结构,我需要在helper.py中导入一些主应用程序模型类。我试过这些:

           from main.models import exampleClass
           from ..main.models import exampleClass

我还尝试在主项目文件夹中添加__init__.py文件:

           src\
               ...
               main\
               lib\
               __init__.py

总是错误2种:

1)ValueError:相对导入错误 2)没有模块名称..

我需要解决方案并需要很好的解释为什么我总是失败。非常感谢你们。

3 个答案:

答案 0 :(得分:1)

__init__.py文件夹而不是main文件夹中添加src。然后尝试使用from main.models import exampleClass导入。它应该工作。

答案 1 :(得分:0)

你是如何设置$ PYTHONPATH变量的?搜索路径与此环境变量相关。

因此,如果要指定main.models之类的路径,则应包含src目录。

请注意,您还可以使用sys.path数组进行管理。

Django通常会将所有应用程序添加到sys.path。您可以尝试在settings.py文件中打印它以获得想法。

要从项目的settings.py文件添加路径,您可以执行以下操作:

import os.path
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(os.path.join(BASE_DIR, "../lib"))

例如,如果您的lib目录与包含settings.py文件的目录处于同一级别。

答案 2 :(得分:0)

如果..main都是django的应用,并且您已在lib设置中注册了这些应用,那么您不需要INSTALLED_APPS

如果mainlibmanage.py处于同一级别:

src/
    main/
        ...
    lib/
        ...
    manage.py
    ...

你只需要:

from main.models import exampleClass