有没有办法在高度模块的python库中避免过多的__init__.py?

时间:2017-06-15 04:15:51

标签: python

我正在创建一个包含多个图像处理块的Python项目,其中包含多级文件夹:

folder1
  __init__.py
  somecode1.py

  folder11
    __init__.py
    somecode11.py

    folder111
      __init__.py
      somecode111.py

  folder12
    __init__.py
    somecode12.py

  .......

folder2
  __init__.py
  somecode2.py
  ....

这使我能够非常轻松地启用这些模块,例如:

from folder1.somecode1 import XYZ1
from folder1.folder11.somecode11 import XYZ11
from folder1.folder11.folder111.somecode111 import XYZ111

有这么多 init .py会让我的项目文件太多 是否有可能:
(1)我的代码的这种文件夹结构
(2)能够按上述方式导入模块

在每个级别没有那么多 __ init __。py 的情况下执行上述操作?

为什么我要这个?
- 减少在我的git存储库中看到这么多文件的认知负担。

1 个答案:

答案 0 :(得分:1)

任何带有__init__.py文件的目录都被视为Python包。包中的不同模块以与普通模块类似的方式导入,但具有__init__.py文件的特殊行为,该文件用于收集所有包范围的定义。

目录a.py中的root/将导入语句import root.a。此语句将在root中查找__init__.py文件,执行其所有顶级语句。接下来,它将查找名为root / a.py的文件并执行其所有顶级语句。在这些操作之后,a.py中定义的任何变量,函数或类都可以在root.a命名空间中使用。

有一种方便的语法可用于导入深层嵌套的包:import very.deep.module作为示例。这允许您使用示例代替very.deep.module的详细重复。