Getting a module's code object

Peter Otten __peter__ at web.de
Thu Aug 25 17:07:33 CEST 2011


Arnaud Delobelle wrote:

> In Python 3, a function f's code object can be accessed via f.__code__.
> 
> I'm interested in getting a module's code object, i.e. the code that
> is executed when the module is run.  I don't think it's accessible via
> the module object itself (although I would be glad if somebody proved
> me wrong :).  In the marshal module docs [1] it is mentioned that:
> 
> """
> The marshal module exists mainly to support reading and writing the
> “pseudo-compiled” code for Python modules of .pyc files.
> """
> 
> So it seems that the module's code object is marshalled into the .pyc
> file - so there may be a way to unmarshal it - but I can't easily find
> information about how to do this.
> 
> Is this a good lead, or is there another way to obtained a module's code
> object?

Taken from pkgutil.py:

def read_code(stream):
    # This helper is needed in order for the PEP 302 emulation to
    # correctly handle compiled files
    import marshal

    magic = stream.read(4)
    if magic != imp.get_magic():
        return None

    stream.read(4) # Skip timestamp
    return marshal.load(stream)

Alternatively you can compile the source yourself:

module = compile(source, filename, "exec")



More information about the Python-list mailing list