这个工作的正确工具是pkgutil.walk_packages。
列出系统中的所有模块:
import pkgutil for importer, modname, ispkg in pkgutil.walk_packages(path=None, οnerrοr=lambda x: None): print(modname)
请注意,walk_packages会导入所有子包,但不包含子模块。
如果你想列出某个包的所有子模块,那么你可以使用这样的东西:
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_modules只列出了一层的模块。 walk_packages获取所有子模块。 例如,在scipy的情况下,walk_packages返回
scipy.stats.stats
而iter_modules只返回
scipy.stats
pkgutil( http://docs.python.org/library/pkgutil.html )上的文档没有列出/usr/lib/python2.6/pkgutil.py中定义的所有有趣的函数。
也许这意味着这些function不是“公共”界面的一部分,并且可能会发生变化。
但是,至less从Python 2.6(也许还有更早版本)开始,pkgutil带有一个recursion遍历所有可用模块的walk_packages方法。