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

Python子模块中如何不使用包名导入所在包的完整对象?

解决方案

在mod.py中可以通过以下方式获取与外部import mypackage完全一致的包对象,且无需硬编码包名:

import sys
current_package = sys.modules[__package__]

原理说明

  • __package__是Python模块的内置属性,在非命名空间包的模块中,它会自动指向当前模块所属的包的名称(比如在mypackage/mod.py中,__package__的值就是"mypackage")。
  • sys.modules是Python的模块缓存字典,所有已导入的模块/包对象都会保存在这里。直接从其中通过__package__取值,得到的就是包被首次导入时创建的那个对象,不会触发__init__.py的重新加载,完全等同于外部执行import mypackage得到的对象。
  • 当包被重命名时,__package__的值会自动同步为新的包名,无需修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:02:43