让我们说我有一个python包,我想列出这个包中的所有模块。即。
>>> import my_package
>>> import inspect
>>> inspect.getmembers(my_package, inspect.ismodule)
>>> []
出于某种原因,我得到一个空列表。现在,如果我从包中手动加载模块,那么:
>>> import my_package.module_a
>>> inspect.getmembers(my_package, inspect.ismodule)
>>> ['module_a, <module '....'>]
假设我有多个模块并且我不想逐个加载它们,还有其他方法吗? (p.s. from my_package import *
无法工作)。
此外,你知道造成这种行为的原因是什么吗?是否与名称空间有关?
P.S包未在本地安装,我从服务器加载所有内容。
答案 0 :(得分:1)
确实无法获得包名称空间中可能存在的每个可能模块的方法。你可以在包目录中搜索子包目录和模块文件,但是没有什么可以阻止一些代码来创建一个types.ModuleType
对象并将它附加到顶层包。如果您正在处理的包是命名空间包,则可能有任意数量的模块和子包位于磁盘上的不同位置。