Getting a list of all modules

Peter Otten __peter__ at web.de
Wed Jul 30 04:46:04 EDT 2014


Steven D'Aprano wrote:

> I'm looking for a programmatic way to get a list of all Python modules
> and packages. Not just those already imported, but all those which
> *could* be imported.
> 
> I have a quick-and-dirty function which half does the job:
> 
> 
> def get_modules():
>     extensions = ('.py', '.pyc', '.pyo', '.so', '.dll')
>     matches = set()
>     for location in sys.path:
>         if location == '': location = '.'
>         if os.path.isdir(location):
>             for name in os.listdir(location):
>                 base, ext = os.path.splitext(name)
>                 if ext in extensions:
>                     matches.add(base)
>     return sorted(matches)
> 
> 
> 
> but I know it's wrong (it doesn't handle packages correctly, or zip
> files, doesn't follow .pth files, has a very naive understanding of cross-
> platform issues, fails to include built-in modules that don't live in the
> file system, and probably more).
> 
> Is this problem already solved? Can anyone make any suggestions?

$ python3 -m pydoc -b

shows a page with modules that I think is more complete than what you have. 
A quick glance at the implementation suggests that the hard work is done by 

pkgutil.iter_modules()




More information about the Python-list mailing list