只需输入文件夹名称即可运行python模块

时间:2017-06-06 18:23:32

标签: python

我在名为__init__.py的文件夹中有test_module。在__init__.py我有以下代码。但是,当我尝试使用以下命令test_modulepython test_module的父文件夹执行时,我收到以下错误can't find '__main__' module in 'test_module。这不可能吗?或者我必须运行python test_module/__init__.py

def main():
    print('test')


if __name__ == '__main__':
    main()

1 个答案:

答案 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