Python-Django:模块导入语法冲突

时间:2017-09-11 16:24:34

标签: python django python-import

我希望这不是重复,我找不到任何其他答案。

直截了当地说,问题如下。

我在Django有一个项目,其中django-apps使用外部自定义模块。 这是结构:

Project_dir/
  - core/
    - module_1.py
    - module_2.py
  - django_project/
    - __init__.py
    - settings.py
    - urls.py
    - wsgi.py
  - django_app_A/
    - views.py
  - manage.py

问题是我需要在module_1中导入moudule_2的一些类和方法,我只想在module_1中这样做,

from module_2 import foo

当我运行module_1进行测试时,一切正常。尽管如此,我需要在django_app_A / views.py中导入module_1,我会这样做

from core.module_1 import Bar

问题在于:如果我在module_1中有另一个相对导入,就像我一样,我会得到一个

ModuleNotFoundError: No module named 'module_2'

除非我在module_1中使用语法

from .module_2 import foo

通过这样做,Django应用程序将正常工作,页面将正确加载,但同时我“打破”module_1,因为我将无法再独立运行它,因为我将得到一个

ModuleNotFoundError: No module named '__main__.module_2'

我不知道如何修复此冲突并使两个导入语法同时工作。 有线索吗?我错过了什么吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

你应该尽可能多地使用绝对导入。

from core.module_2 import foo

答案 1 :(得分:0)

我无法确定,但这听起来像是一个循环导入问题。

您是否需要导入到" main"水平?如果在类或函数内导入模块2,只需编写

即可
def function_in_question():
    import module_1
    return module_1.whatever()

要寻找的另一件事:你是否以一种实际上是循环的方式使用它? module_2中的函数使用module_1中的函数,该函数使用module_2中的函数?