命名为__main__.py的Python模块导入后无法运行的问题
为什么导入
__main__.py无输出,重命名后正常? 核心问题:__main__是Python的特殊模块名
Python里,__main__是当前正在执行的脚本对应的模块名,不是你创建的那个__main__.py文件。当你运行test.py时,test.py本身就被标记为__main__模块,这时候执行import __main__,导入的是test.py自己,完全没碰同目录下的__main__.py。
这就导致:
- 你写的
__main__.py根本没被加载,所以里面的打印语句不会执行,add函数也调用不了 - 改成
func.py后,这个名字不是Python保留的特殊名称,import func会正常加载同目录下的func.py,模块内的代码会按导入逻辑执行(__name__会被设为func,打印语句正常输出,函数也能调用)
验证方法
在test.py里加两行代码就能确认:
import __main__ print(__main__.__file__) # 输出的是test.py的路径,不是__main__.py的路径 print(dir(__main__)) # 列表里不会有add函数,说明没加载目标文件
解决办法
如果要加载包含add函数的文件,绝对别用__main__.py当文件名,换成普通名称(比如func.py)后正常导入就行。要是想让某个目录作为可执行包(比如用python -m 包名运行),那__main__.py应该放在包目录下,作为包的入口脚本,而不是当作普通模块导入。
内容的提问来源于stack exchange,提问作者Mohsen_Fatemi
相关产品推荐
相关产品推荐

