Python 中的相对导入问题

Issue With Relative Imports In Python

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

假设目录结构如下:

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 时它会中断。

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

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

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_cmodule_c 中导入 module_b module_b 中,您将遇到 cyclic import 问题。这是一个设计问题。您需要检查您的代码并重新考虑如何 link 模块。