Python中相对导入的问题

Python中相对导入的问题

本文介绍了Python中相对导入的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在如何正确声明已编写的某些模块的导入方面遇到了问题.

I'm running into an issue with how to properly declare imports for some modules that I've written.

假设以下目录结构:

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

相对于模块A,模块B和C都位于同一子目录中.

So that modules B and C are both in the same subdirectory relative to module A.

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

Module B imports C.Module A sometimes imports B.

因此,在模块B中,使用import module_C可以正常工作.

So, in Module B, using import module_C works fines.

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

And in Module A, using import sub_dir.module_C works fine.

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

However, in Module A, using import sub_dir.module_Bcauses an ImportError no module named 'module_C' because B imports C.

我假设我可以将B更改为import sub_dir.module_C,但我不想这样做,因为那样一来,当我直接从B开始而不是从A导入B时,它将损坏.

I'm assuming that I could change B to import sub_dir.module_C but I don't want to do that because then it will break when I start directly in B rather than import B from A.

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

What's the correct way(s) to handle this sort of issue?

推荐答案

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

This should be your app structure of files.

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 中的所有模块.

Then, you will have access to all modules from module_a.

如果在 module_c 中导入 module_b 或在 module_b 中导入 module_c ,您将具有问题.这是一个设计问题.您需要检查代码并重新考虑如何链接模块.

If you import module_b in module_c or module_c in module_b you will have an cyclic import issue. This is a design question. You need to review your code and rethink how to link modules.

这篇关于Python中相对导入的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 10:53