在 __init__ 文件中导入

问题描述

我正在用 Python 构建一个小项目。我的结构是这样的:

src
  - module_a
      - __init__.py
      - helper.py
  - module_b
      - __init__.py
      - utils.py
  - __init__.py
  - main_script.py

这有效

# src __init__ file contents
from src import module_a,module_b

# module_a __init__ file contents
from module_a.helper import func1

# module_b __init__ file contents
from module_b.utils import func2

这不起作用

# src __init__ file contents
from src import module_a,module_b

# module_a __init__ file contents
from src.module_a.helper import func1

# module_b __init__ file contents
from src.module_b.utils import func2

这会引发错误 No module named src。这应该有效,对吧?谁能详细解释一下为什么这不起作用?

解决方法

在第二种情况下,您没有导入 src,因此没有 src 模块可以从中访问内容。 from src import module_a,module_b 初始化模块 module_a 和 module_b 并使用 from src 部分来描述在哪里可以找到它们。因此,module_a 和 module_b 是自由浮动的对象,完全不受 src 约束。如果您希望它们成为 src 的属性,只需使用 import src,尽管您的工作案例似乎工作正常。更多详情:https://realpython.com/lessons/import-statement/