从 __init__.py 重新导出模块的正确方法

Ewa*_*ren 6 python python-import python-3.x

我有一个包含多个模块的插件包,每个模块定义一个类(每个类都是一个插件)。

我的包结构如下所示:

plugins
? __init__.py
? first_plugin.py
? second_plugin.py
? third_plugin.py
Run Code Online (Sandbox Code Playgroud)

插件文件通常是这样的,只包含一个类定义(必要时还有一些导入):

plugins
? __init__.py
? first_plugin.py
? second_plugin.py
? third_plugin.py
Run Code Online (Sandbox Code Playgroud)

我希望最终用户能够像这样导入插件:

# in first_plugin.py

class MyFirstPlugin:
    ...
Run Code Online (Sandbox Code Playgroud)

而不是必须同时输入模块名称(这是当前需要做的):

from plugins import FirstPlugin
Run Code Online (Sandbox Code Playgroud)

有没有办法通过直接在 __init__.py 文件中重新导出模块的类来实现这一点,不必像这样逐个模块地导入所有内容(当有很多模块时会变得很麻烦):

from plugins.first_plugin import FirstPlugin
Run Code Online (Sandbox Code Playgroud)

Obj*_*ect 3

我认为这在 Python 中是不可能的。但是,您可以导入整个模块,因此不必单独导入每个类。

例如

from first_plugin import *
Run Code Online (Sandbox Code Playgroud)

让你做

from plugin import # Anything in first_plugin
Run Code Online (Sandbox Code Playgroud)

这有点痛苦,但编写库并不容易(等到你使用 CMake 和 C/C++ 时,你必须指定源树中的每个文件 : D)