来自导入系统的 Python 文档(粗体强调是我的):5.8. 特别考虑__main__该__main__模块是相对于 Python 导入系统的特例。正如其他地方所指出的,该__main__模块在解释器启动时直接初始化,非常类似于sys和builtins。然而,与这两个不同的是,它严格来说并不符合内置模块的资格。这是因为初始化的方式__main__取决于调用解释器的标志和其他选项。5.8.1. __main__.__spec__根据__main__初始化方式,__main__.__spec__适当设置或设置为None。当Python使用该-m选项启动时,__spec__被设置为相应模块或包的模块规范。当模块作为执行目录、zip 文件或其他条目的一部分加载__spec__时也会填充。__main__sys.path在其余情况下__main__.__spec__设置为None,因为用于填充 的代码__main__不直接与可导入模块对应:互动提示-c选项从标准输入运行直接从源文件或字节码文件运行请注意,这__main__.__spec__始终是None最后一种情况,即使该文件在技术上可以直接作为模块导入。-m如果需要有效的模块元数据,请使用该开关__main__。另请注意,即使__main__与可导入模块相对应并__main__.__spec__进行相应设置,它们仍然被视为不同的模块。这是因为受if __name__ == "__main__":检查保护的块仅在模块用于填充__main__命名空间时执行,而不是在正常导入期间执行。作为脚本运行时,为什么源/字节代码文件不作为模块导入?
1 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
正如文档中所指定的,当作为脚本( )运行时,源/字节代码文件不会作为模块导入,python <file path>
因为将代码作为模块-m
运行已经是参数 ( )的目的python -m <module name>
。
添加回答
举报
0/150
提交
取消