Python嵌套模块别名配置:如何编写__init__.py实现指定导入方式
问题描述
现有Python包结构如下:
. ├── Module │ ├── subModule1 │ │ ├── file1.py │ │ └── file2.py │ └── subModule2 │ ├── file3.py │ └── file4.py └── main.py
其中main.py是顶层脚本,需要使用Module模块。该模块为了代码组织被拆分为两个子模块,多个函数分布在file<N>.py文件中。
希望在main.py中按以下方式导入模块:
import Module as m
并按以下方式调用子模块中的函数:
m.sm1.foo() # foo是subModule1中的函数 m.sm2.faa() # faa是subModule2中的函数
请问需要如何编写__init__.py文件来实现这一需求?
解决方案
你需要在三个位置配置__init__.py文件(若文件已存在则修改内容),具体如下:
1. 根模块Module/__init__.py
该文件负责将子模块映射为你想要的别名,让顶层导入后能直接通过m.sm1和m.sm2访问:
# 导入子模块并指定别名 from . import subModule1 as sm1 from . import subModule2 as sm2 # 可选:明确对外暴露的成员,避免导入时显示冗余内容 __all__ = ['sm1', 'sm2']
2. 子模块Module/subModule1/__init__.py
该文件需要把file1.py、file2.py中的目标函数暴露出来,这样就能直接通过sm1.foo()调用,无需逐层访问文件:
# 从对应文件导入需要对外暴露的函数 from .file1 import foo # 按需导入file2中的其他函数,比如bar from .file2 import bar # 可选:指定对外暴露的成员列表 __all__ = ['foo', 'bar']
3. 子模块Module/subModule2/__init__.py
同理,将file3.py、file4.py中的目标函数(如faa)暴露出来:
# 从file3导入目标函数faa from .file3 import faa # 按需导入file4中的其他函数,比如baz from .file4 import baz # 可选:指定对外暴露的成员列表 __all__ = ['faa', 'baz']
验证配置
完成上述设置后,在main.py中执行以下代码即可正常调用:
import Module as m m.sm1.foo() m.sm2.faa()
内容的提问来源于stack exchange,提问作者RSM
相关产品推荐
相关产品推荐

