首页 > 解决方案 > 如何在包中包含可选模块

问题描述

我正在制作一个基于 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以便在捕获到异常时跳过整个 import mygui 吗?myaudio 完全独立于 mygui。我不确定在这种情况下什么是好的做法。

非常感谢。

标签: python

解决方案


那么为什么你需要导入你的子模块__init__.py呢?

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

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


推荐阅读