Python中如何编程判断__main__模块所属的对应包?
可靠判断主脚本所属包的两种方法
方法1:使用__package__内置属性
通过python -m方式运行模块时,Python会自动为入口__main__模块设置__package__属性,值为该模块所属的父包完整名称。你直接判断属性值即可,完全不受PYTHONPATH目录层级、文件路径变化的影响:
if __name__ == "__main__": if __package__ == "some_package": print("当前主脚本归属于some_package包")
如果是嵌套子包的场景,比如some_package.subpackage.script,__package__的值会是some_package.subpackage,同样可以直接匹配。
方法2:通过__spec__模块元数据校验(兼容性更强)
Python 3.4及以上版本可以读取__main__模块的__spec__属性,该属性存储了模块完整的导入元数据,判断逻辑更严谨,也兼容更多特殊场景:
import sys if __name__ == "__main__": main_mod = sys.modules["__main__"] # 判断主模块的完整导入路径是否以some_package开头 if main_mod.__spec__ and main_mod.__spec__.name.startswith("some_package."): print("当前主脚本归属于some_package包")
此处main_mod.__spec__.name的值就是模块的完整导入路径,你示例场景下的值为some_package.script,前缀匹配即可确认从属关系。
如果是直接执行脚本(非-m模式),__package__会为空字符串,__spec__也会为None,两种方法都能正确识别出该脚本不属于任何包的情况。
内容的提问来源于stack exchange,提问作者xaviersjs
相关产品推荐
相关产品推荐

