Getting a module's code object
Peter Otten
__peter__ at web.de
Thu Aug 25 11:07:33 EDT 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