List all the modules that are part of a python package? List all the modules that are part of a python package? python python

List all the modules that are part of a python package?


Yes, you want something based on pkgutil or similar -- this way you can treat all packages alike regardless if they are in eggs or zips or so (where os.listdir won't help).

import pkgutil# this is the package we are inspecting -- for example 'email' from stdlibimport emailpackage = emailfor importer, modname, ispkg in pkgutil.iter_modules(package.__path__):    print "Found submodule %s (is a package: %s)" % (modname, ispkg)

How to import them too? You can just use __import__ as normal:

import pkgutil# this is the package we are inspecting -- for example 'email' from stdlibimport emailpackage = emailprefix = package.__name__ + "."for importer, modname, ispkg in pkgutil.iter_modules(package.__path__, prefix):    print "Found submodule %s (is a package: %s)" % (modname, ispkg)    module = __import__(modname, fromlist="dummy")    print "Imported", module


The right tool for this job is pkgutil.walk_packages.

To list all the modules on your system:

import pkgutilfor importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):    print(modname)

Be aware that walk_packages imports all subpackages, but not submodules.

If you wish to list all submodules of a certain package then you can use something like this:

import pkgutilimport scipypackage=scipyfor importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,                                                      prefix=package.__name__+'.',                                                      onerror=lambda x: None):    print(modname)

iter_modules only lists the modules which are one-level deep. walk_packages gets all the submodules.In the case of scipy, for example, walk_packages returns

scipy.stats.stats

while iter_modules only returns

scipy.stats

The documentation on pkgutil (http://docs.python.org/library/pkgutil.html)does not list all the interesting functions defined in /usr/lib/python2.6/pkgutil.py.

Perhaps this means the functions are not part of the "public" interface and are subject to change.

However, at least as of Python 2.6 (and perhaps earlier versions?)pkgutil comes with a walk_packages method which recursively walks through all themodules available.


This works for me:

import typesfor key, obj in nltk.__dict__.iteritems():    if type(obj) is types.ModuleType:         print key