gpt4 book ai didi

python - 导入看不到包中的模块,两次导入之间不一致

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:57 24 4
gpt4 key购买 nike

在我正在处理的某些代码中导入模块时,我遇到了一个特殊的问题。目录布局为:

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() 或 inform.getmembers() 会产生:

dir(soundings)
['WK82', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

dir(hodographs)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

为什么 soundings 导入会拾取其模块 WK82,而 hodographs 导入却不会拾取 curve90?我正在尝试动态生成 pyQt 小部件,这些小部件只需通过将文件添加到模块目录即可填充。这适用于探测模块,但不适用于测速仪。

我可以通过使用以下方法来解决这个问题:

import hodographs.curved90
dir(hodographs)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'curved90']

但这违背了不必在动态内容生成中显式命名导入的目的。

如何解决此问题,以便“导入 Hodographs”正确导入该目录中的所有文件?

最佳答案

导入包时,仅初始化并导入包(即 __init__.py 中定义的内容)——包中包含的子包和模块不会自动导入导入。

为此,您需要编辑 __init__.py 文件,使其如下所示:

# cms1init/soundings/__init__.py
from cms1init.soundings import WK82

这样,WK82 模块就会被导入并作为 cms1init.soundings 的属性使用。只需对 cms1init.hodographs 包重复该操作即可。

这有意义吗?

关于python - 导入看不到包中的模块,两次导入之间不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com