Why do I need __init__.py at every level?
假设我有以下目录结构,其中
1 2 3 4 5 | . \---foo \---bar \---__init__.py \---baz.py |
当我运行
1 2 3 | Traceback (most recent call last): File"<string>", line 1 ImportError: No module named foo.bar.baz |
如果我是
我是做了什么错事还是误解了
更新
我正在使用一个为我生成
是的,如果要将目录视为模块,则需要此文件。
The
__init__.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case,__init__.py can just be an empty file, but it can also execute initialization code for the package or set the__all__ variable, described later.
https://docs.python.org/3/tutorial/modules.html包
我尝试创建非空的
问题更新后编辑
默认的导入者/查找者(检查
第三个是
docx1〔3〕在来自
参考您的示例:
1 2 3 4 | foo/ bar/ __init__.py baz.py |
如果您在
foo/ 中创建_init__.py ,foo.bar.baz 将可用(如您所说)。如果您将
foo/ 添加到sys.path 或通过PYTHONPATH=foo/ 传递,bar.baz 将可用(注意没有父模块foo)。如果您编写自己的finder(和loader),那么您可以加载任何文件,例如,不管它在哪里。这给了你很大的力量。例如,查看
stack-overflow-import ,根据so的搜索结果显示代码。