You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:22:21