假设我有以下目录结构,其中.
表示当前工作目录
.
\---foo
\---bar
\---__init__.py
\---baz.py
当我运行python -c "import foo.bar.baz"
时,我得到了
Traceback (most recent call last):
File "<string>", line 1
ImportError: No module named foo.bar.baz
如果我使用echo "" > foo/__init__.py
,上述命令会正常工作。我是否做错了什么或者我误解了__init__.py
的意义?我认为它是用来阻止模块在不该存在的地方存在,例如一个名为string
的目录,但如果你在我的例子中将foo
替换为string
,似乎我被迫创建永远不应该使用的模块,只为了能够引用层次结构更深的文件。更新:
我正在使用一个生成
__init__.py
并强制执行目录结构的构建系统,虽然我可以调整层次结构,但我更愿意自己添加__init__.py
。稍微改变一下问题,为什么我需要在每个级别都有一个Python包而不仅仅是在顶部?这只是一个规则,你只能从Python路径或Python路径下的一系列包链导入模块吗?
import bar.baz
进行导入,这是有效的。但是,在foo
没有__init__.py
文件之前,它不会被识别为一个包。 - cs95__init__.py
表示“你可以导入我”。 - voy__init__.py
如何创建一个模块,而是更多地询问什么使得一个模块可以被导入。你只能通过 Python 路径上的目录链来导入一个模块吗?还是你可以通过包和目录链来导入一个模块呢? - quittle