__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")
当我们用命令python test_module
执行test_module
包,我们得到以下的输出:
> python test_module
Running: __main__.py
然而,如果我们进入了Python外壳和import test_module
,输出如下:
>>> import test_module
Running: __init__.py
因此,为了在尝试直接执行test_module
时获得所需的行为,只需在test_module
内创建一个新的__main__.py
文件并将代码f rom __init__.py
到新的__main__.py
。
尝试使用['python -m test_module'](https://docs.python.org/2/using/cmdline.html#cmdoption-m) – dhke
您能解释一下为什么要这样做吗?它似乎不是非常pythonic – Y0da