这项工作的正确工具是pkgutil.walk_包。
要列出系统上的所有模块:import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, οnerrοr=lambda x: None):
print(modname)
请注意,walk_包导入所有子包,而不是子模块。
如果要列出某个包的所有子模块,则可以使用以下方法:import pkgutil
import scipy
package=scipy
for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,
prefix=package.__name__+'.',
οnerrοr=lambda x: None):
print(modname)
iter_模块只列出一级深度的模块。
walk_包获得所有子模块。
例如,对于scipy,walk_包返回scipy.stats.stats
而iter_模块只返回scipy.stats
关于pkgutil(http://docs.python.org/library/pkgutil.html)的文档
不列出
/usr/lib/python2.6/pkgutil.py。
也许这意味着这些功能不是“公共”界面的一部分,并且可能会发生变化。
然而,至少从Python2.6开始(也许更早的版本?)
pkgutil附带了walk_packages方法,它递归地遍历所有
提供模块。