如何在包装中包含可选模块

时间:2019-07-11 07:55:21

标签: python

我正在基于Pyaudio制作一个包装,以处理一些音频处理和播放,

我想在gui.py(Gui类)中创建一个可选的Gui类,它是基于PyQt5的GUI控制台。

但是,由于该软件包主要是与音频相关的软件包。我想使Gui类成为可选的导入,以便当用户导入没有PyQt5依赖关系的主模块时,他们当然仍可以使用除gui部分之外的模块。

src
----__init__.py
----myaudio.py
----mygui.py


#__init__.py
from .myaudio import Pyaudio
try:
    from .mygui import Mygui
except:
    raise Warning("no PyQt5 found, Mygui not available")


#mygui.py
import PyQt5
import myaudio

可以只在 init 中使用try,这样如果捕获到异常会跳过整个导入mygui吗? myaudio完全独立于mygui。我不确定在这种情况下什么是好的做法。

非常感谢。

1 个答案:

答案 0 :(得分:2)

那为什么要在__init__.py中导入子模块?

为什么不让您的用户将其导入为from your_package.myaudio import Pyaudio。在这种情况下,您无需执行任何操作。

如果他们要使用GUI,则只需使用from your_package.mygui import Mygui