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
相关产品推荐
相关产品推荐

