On 2014-07-30 09:46, Peter Otten wrote:
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()
There are two niggles to this answer: it omits builtin modules, but those are easily discovered through sys.builtin_module_names. It can also include spurious script .py files that cannot be imported because their names are not Python identifiers: e.g. check-newconfigs.py. Those are easy to filter out, fortunately.
-- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco -- https://mail.python.org/mailman/listinfo/python-list
