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

如何在Python中转发子模块导入?优化嵌套包导入路径

解决方案

修改外层package_b/__init__.py

要实现无需手动编写子包内容名称的自动映射,替换外层package_b/__init__.py的内容为以下代码:

import importlib
import os

# 定位内层同名子包的目录
inner_package_path = os.path.join(os.path.dirname(__file__), "package_b")

# 遍历内层子包下的所有模块文件
for file_name in os.listdir(inner_package_path):
    if file_name.endswith(".py") and file_name != "__init__.py":
        # 提取模块名(去掉.py后缀)
        module_name = file_name[:-3]
        # 动态导入内层模块
        imported_module = importlib.import_module(f".package_b.{module_name}", __name__)
        # 将模块挂载到外层包的命名空间
        globals()[module_name] = imported_module

为什么之前的from .package_b import *无效?

from .package_b import *只会导入内层package_b/__init__.py中显式暴露的名称,但内层__init__.py默认是空的,所以不会把some_file_b.py这类模块导入到外层包的命名空间里,自然无法直接用package_b.some_file_b的方式引用。

效果验证

修改完成后,在some_file_a.py中直接使用目标导入语句即可:

from package_b.some_file_b import stuff

后续内层子包新增模块时,这段代码会自动识别并导入,不需要再次修改外层__init__.py。

内容的提问来源于stack exchange,提问作者theberzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:04