如何导入 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中的函数导入模块将模块对象绑定到全局命名空间?

在 Python 中,如何从导入的模块访问主模块的命名空间?

python中模块和包的概念

模块导入总结

Python3 中的 Python 命名空间包

python中模块和包的概念