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

Python如何通过相对导入将当前模块__init__.py导入指定命名空间

可用实现方案

你可以通过Python标准库importlib的动态导入能力实现需求,完全不需要硬编码外层模块名称,也不需要重构现有代码结构:

实现代码(在submodule.py中使用)

import importlib
# 动态获取当前所属的包模块,等价于导入外层的__init__.py
outer_module = importlib.import_module(__package__)

# 本地同名变量不会被覆盖
SOME_CONSTANT_ONE = "one!"

def do_work():
    print(SOME_CONSTANT_ONE)              # 输出 "one!"
    print(outer_module.SOME_CONSTANT_ONE) # 输出 1

原理解释

  • 每个Python子模块运行时都会自动被赋值__package__属性,该属性的值就是当前子模块所属的顶层包名称,比如mymodule.submodule的__package__值就是mymodule,就算后续你修改外层包名,这个属性会自动同步更新,不会失效。
  • importlib.import_module方法可以根据传入的包名字符串动态导入对应模块,导入后绑定到你指定的变量名(这里是outer_module)上,所有__init__.py中定义的常量、函数都会挂载在这个变量的命名空间下,不会污染当前文件的作用域,新增常量也不需要修改导入语句,可维护性符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:02