You could use pkgutil. This lists all modules inside /usr/lib/python2.6/site-packages: (Unlike sys.modules
, this lists modules without you having to import them first).
import pkgutil
print [name for module_loader,name,ispkg in
pkgutil.walk_packages(['/usr/lib/python2.6/site-packages'])]
Edit:
The docs do not list walk_packages
. However, pkgutil
includes walk_packages
in pkgutil.__all__
. This means it is part of pkgutil's public interface. You can find the following documentation on walk_packages
in /usr/lib/python2.6/pkgutil.py or by typing help(pkgutil.walk_packages)
:
Definition: pkgutil.walk_packages(path=None, prefix='', onerror=None)
Docstring:
Yields (module_loader, name, ispkg) for all modules recursively
on path, or, if path is None, all accessible modules.
'path' should be either None or a list of paths to look for
modules in.
'prefix' is a string to output on the front of every module name
on output.
Note that this function must import all *packages* (NOT all
modules!) on the given path, in order to access the __path__
attribute to find submodules.
'onerror' is a function which gets called with one argument (the
name of the package which was being imported) if any exception
occurs while trying to import a package. If no onerror function is
supplied, ImportErrors are caught and ignored, while all other
exceptions are propagated, terminating the search.
Examples:
# list all modules python can access
walk_packages()
# list all submodules of ctypes
walk_packages(ctypes.__path__, ctypes.__name__+'.')