This module aims to provide a unified, object-oriented view of
Python's runtime hierarchy.
Python is a very dynamic language with wide variety of introspection
utilities. However, these utilities can be hard to use, because there is
no consistent API. The introspection API in python is made up of
attributes (__name__, __module__, func_name, etc) on instances, modules,
classes and functions which vary between those four types, utility
modules such as 'inspect' which provide some functionality, the 'imp'
module, the "compiler" module, the semantics of PEP 302
support, and setuptools, among other things.
At the top, you have "PythonPath", an abstract
representation of sys.path which includes methods to locate top-level
modules, with or without loading them. The top-level exposed functions in
this module for accessing the system path are "walkModules",
"iterModules", and "getModule".
From most to least specific, here are the objects provided:
PythonPath # sys.path
|
v
PathEntry # one entry on sys.path: an importer
|
v
PythonModule # a module or package that can be loaded
|
v
PythonAttribute # an attribute of a module (function or class)
|
v
PythonAttribute # an attribute of a function or class
|
v
...
Here's an example of idiomatic usage: this is what you would do to
list all of the modules outside the standard library's python-files
directory:
import os
stdlibdir = os.path.dirname(os.__file__)
from twisted.python.modules import iterModules
for modinfo in iterModules():
if (modinfo.pathEntry.filePath.path != stdlibdir
and not modinfo.isPackage()):
print 'unpackaged: %s: %s' % (
modinfo.name, modinfo.filePath.path)