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() -- https://mail.python.org/mailman/listinfo/python-list