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

相对导入模块场景下,如何仅执行模块初始化而不导出内容?

解决方法

嘿,这个需求其实很好满足——你只需要在subpackage/__init__.py里直接导入整个spam模块就行,不用指定要导出的具体对象,这样Python就会自动执行spam.py里的初始化代码了。

两种导入方式的具体写法

  • 相对导入(更推荐,适配你早期开发的场景):
    直接在__init__.py里加一行:

    from . import spam
    

    这种写法不会把spam里的对象暴露到subpackage的命名空间中,单纯只是触发spam.py的执行。

  • 绝对导入:
    如果想用绝对路径的方式,写法是:

    from package.subpackage import spam
    

原理说明

Python在导入模块时,会执行该模块内的所有顶层代码——也就是你写的那些初始化逻辑(比如配置初始化、全局变量设置、注册回调等),不管你有没有显式导出模块里的对象。而我们上面的写法只是导入模块本身,不会把spam里的eggs、beans之类的内容带到__init__.py的命名空间里,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:07:39