python - Python 中的相对导入问题

标签 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 没有名为 '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_c 中导入 module_b 或在 module_b 中导入 module_c,您将获得 cyclic import问题。这是一个设计问题。您需要检查代码并重新考虑如何链接模块。

关于python - Python 中的相对导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287540/

相关文章:

python - 是否有一个函数可以将空格分隔的字符串整数 ['5 2 2' ,'4 2 3' ] 转换为 [[5, 2, 2], [4, 2, 3]]

python - 导入错误:没有名为 suds 的模块

c++ - 如何处理具有相同 namespace 的多个导入?

python - 由 Python 的卡住工具创建的独立可执行文件的 ImportError

python - pycurl 与谷歌应用引擎

python - 调用 Django i18n makemessages 命令时出现 UnicodeError 错误

python - 导入spaCy错误

python - Gunicorn 在被 supervisord 调用时抛出 OSError 打开文件

django - 多个Django View 之间的fakeredis

python - 在 pandas 中创建一个分数列,其值取决于另一列的百分位数