我在名为__init__.py
的文件夹中有test_module
。在__init__.py
我有以下代码。但是,当我尝试使用以下命令test_module
从python test_module
的父文件夹执行时,我收到以下错误can't find '__main__' module in 'test_module
。这不可能吗?或者我必须运行python test_module/__init__.py
?
def main():
print('test')
if __name__ == '__main__':
main()
答案 0 :(得分:2)
导入包时执行__init__.py
模块。每documentation __init__.py
个文件的目的如下:
需要
__init__.py
个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py
可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__
变量,稍后将对此进行描述。
为了直接执行Python包,它需要有一个入口点,由名为__main__.py
的包中的模块指定。因此错误can't find '__main__' module in 'test_module'
:您试图直接执行包,但Python无法找到一个入口点来开始执行顶级代码。
考虑以下包结构:
test_module/
__init__.py
__main__.py
__init__.py
包含以下内容:
print("Running: __init__.py")
__main__.py
包含以下内容:
print("Running: __main__.py")
当我们使用命令test_module
执行python test_module
包时,我们得到以下输出:
> python test_module
Running: __main__.py
但是,如果我们输入Python shell和import test_module
,输出如下:
>>> import test_module
Running: __init__.py
因此,为了在尝试直接执行test_module
时获得您想要的行为,只需在__main__.py
中创建一个新的test_module
文件,然后将代码从__init__.py
传输到新的__main__.py
。