- 5.8. 有关 main 的特殊事项
- 5.8.1. main.spec
- 5.8.1. main.spec
5.8. 有关 main 的特殊事项
对于 Python 的导入系统来说 main
模块是一个特殊情况。 正如在 另一节 中所述,main
模块是在解释器启动时直接初始化的,与 sys
和 builtins
很类似。 但是,与那两者不同,它并不被严格归类为内置模块。 这是因为 main
被初始化的方式依赖于发起调用解释器所附带的旗标和其他选项。
5.8.1. main.spec
根据 main
被初始化的方式,main.spec
会被设置相应值或是 None
。
当 Python 附加 -m
选项启动时,spec
会被设为相应模块或包的模块规格说明。 spec
也会在 main
模块作为执行某个目录,zip 文件或其它 sys.path
条目的一部分加载时被填充。
在 其余的情况 下 main.spec
会被设为 None
,因为用于填充 main
的代码不直接与可导入的模块相对应:
交互型提示
-c
选项从 stdin 运行
直接从源码或字节码文件运行
请注意在最后一种情况中 main.spec
总是为 None
,即使 文件从技术上说可以作为一个模块被导入。 如果想要让 main
中的元数据生效,请使用 -m
开关。
还要注意即使是在 main
对应于一个可导入模块且 main.spec
被相应地设定时,它们仍会被视为 不同的 模块。 这是由于以下事实:使用 if name == "main":
检测来保护的代码块仅会在模块被用来填充 main
命名空间时而非普通的导入时被执行。