如何导入 Python 命名空间包的所有子模块?
Posted
技术标签:
【中文标题】如何导入 Python 命名空间包的所有子模块?【英文标题】:How do I import all the submodules of a Python namespace package? 【发布时间】:2012-05-28 12:55:34 【问题描述】:一个 Python 命名空间包可以分布在许多目录、zip 文件或自定义导入器中。迭代命名空间包的所有可导入子模块的正确方法是什么?
【问题讨论】:
你想完成什么?你试过什么? 您可以使用 pkgutil 模块。 ***.com/questions/3365740/… 我有兴趣将它用于插件枚举。 【参考方案1】:请阅读import confusion。
它非常清楚地区分了您可以导入包及其子模块的所有不同方式,并在此过程中回答您的问题。当你需要一个包中的某个子模块时,写from io.drivers import zip
通常比写import io.drivers.zip
方便得多,因为前者可以让你简单地用 zip 来引用模块而不是它的全名。
from modname import *
,这提供了一种将模块中的所有项目导入当前命名空间的简单方法;但是,应谨慎使用此语句。
【讨论】:
我不是特别想问“import *”,当你从命名空间包中“import *”时什么也没有发生。相反,我想遍历我可以导入的所有内容。 使用*
进口是一种糟糕的做法。虽然它是有效的 Python,但在一些狭窄的案例之外,它几乎总是一个坏主意。
是的,我同意,因为它降低了时间效率,但是在不知道要使用的特定模块的情况下,导入整个包成为救星。以上是关于如何导入 Python 命名空间包的所有子模块?的主要内容,如果未能解决你的问题,请参考以下文章
从__init__.py中的函数导入模块将模块对象绑定到全局命名空间?