在我正在处理的一些代码中导入模块时遇到了一个奇怪的问题。目录布局是:
main.py
cm1sinit/
__init__.py
MainInterface.py
soundings/
__init__.py
WK82.py
hodographs/
__init__.py
curved90.py
在所有情况下,__ init__.py都是一个0长的空文件。
在MainInterface.py中,我有以下导入:
import soundings
import hodographs
并在每个上面调用dir()或inspect.getmembers():
dir(soundings)
['WK82', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
dir(hodographs)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
为什么声音输入拾取其模块WK82而hodographs导入没有拾取弯曲90?我正在尝试动态生成仅通过向模块目录添加文件来填充的pyQt小部件。这适用于发声模块,但不适用于hodographs。
我可以通过使用:
来解决这个问题import hodographs.curved90
dir(hodographs)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'curved90']
但这违背了我不必在动态内容生成中明确命名导入的目的。
如何解决这个问题,以便'导入hodographs'正确导入该目录中的所有文件?
答案 0 :(得分:1)
导入包时,只会初始化和导入包(即__init__.py
中定义的包) - 包中包含的子包和模块不会自动导入。
为此,您需要编辑__init__.py
个文件,使其如下所示:
# cms1init/soundings/__init__.py
from cms1init.soundings import WK82
这样,WK82
模块就会被导入并作为cms1init.soundings
的属性使用。只需重复cms1init.hodographs
包的操作。
这有意义吗?