Python中的相对导入问题

时间:2015-03-26 19:48:19

标签: python python-3.x importerror

我遇到了如何正确声明我编写的某些模块的导入问题。

假设以下目录结构:

main_dir/
 __init__.py
 module_A
    sub_dir/
     __init__.py
     module_B
     module_C

因此,模块B和C都在相对于模块A的相同子目录中。

模块B导入C. 模块A有时会导入B。

因此,在模块B中,使用import module_C可以处罚款。

在模块A中,使用import sub_dir.module_C可以正常工作。

但是,在模块A中,使用import sub_dir.module_B 导致ImportError no module named 'module_C',因为B导入C。

我假设我可以将B更改为import sub_dir.module_C,但我不想这样做,因为当我直接从B开始而不是从A导入B时它会中断。

处理此类问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这应该是您的文件的应用程序结构。

app/
├── __init__.py
├── module_a.py
└── subdir
    ├── __init__.py
    ├── module_b.py
    └── module_c.py

<强> module_a.py

from subdir import module_b, module_c

然后,您将可以访问 module_a 中的所有模块。

如果您在 module_b 中导入 module_b 或在 module_b 中导入 module_c ,您将获得cyclic import问题。这是一个设计问题。您需要检查代码并重新思考如何链接模块。