【发布时间】:2016-04-03 08:09:23
【问题描述】:
给定一个具有以下结构的目录:
├── foo
│ ├── bar
│ │ └── baz.py
│ └── bar.py
└── foo.py
以及以下文件内容:
foo.py
class Foo:
pass
foo/bar.py
class Bar:
pass
foo/bar/baz.py
class Baz:
pass
我希望能够从其他文件中完成所有这些事情:
from foo import Foo
from foo.bar import Bar
from foo.bar.baz import Baz
即好像每个文件中的定义都与组成同名目录的模块定义“合并”了。如何以不需要我手动指定每条路径的动态方式(无论是否涉及__init__.py)来完成此任务?
当我在每个目录中放置空的__init__.py 文件并尝试执行上述导入时,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from foo import Foo
ImportError: cannot import name 'Foo'
在我看来,这表明foo.py 文件已被foo 目录覆盖,因此foo.py 中的定义不可见。
【问题讨论】:
-
您的意思是希望您避免输入
foo.bar.baz?在这种情况下,是的,使用__init__.py文件相当容易。 -
不,我可以完全按照所示输入导入。我已经用我尝试这样做时遇到的错误更新了问题。
-
当我说“以一种不需要我手动指定每个路径的动态方式”时,我的意思是我不想更新
__init__.py文件,因为例如,包含我想要此行为的每个新文件/目录。