how to extract source code from code objects ?

Skip Montanaro skip at pobox.com
Fri Jan 3 16:47:17 CET 2003


    Michele> decompyle works and it is easy to install and to use. However,
    Michele> it is not in the standard library and this implies two
    Michele> disadvantages:
    Michele> i) it is not universally available;
    Michele> ii) for any new version of Python I must download a new version
    Michele> of decompyle. 

    Michele> I was hoping for a more built-in solution, as for instance an
    Michele> attribute .co_source in code objects. I guess this would be
    Michele> inefficient for memory consumption or for other technical
    Michele> reasons.

Inefficient, perhaps, but not hugely, I wouldn't think, since code objects
are relatively rare beasts in the Python object landscape.  The source code
isn't normally needed, because in most cases it can be looked up in the
source file (check out the inspect.getsource function).  If you can provide
a convincing use case why the source for manually compiled code should be
retained in a feature request on SourceForge, it's possible that someone
will add a co_source field to code objects.  It would help if you supplied a
patch that implemented the feature request.  (Note that simply extending
code objects with a co_source slot won't be enough.  The compiler will have
to be modified to stuff the code in there.)

An alternative is to simply maintain a dictionary that maps code objects to
source code, e.g.,:

    >>> def f(): pass
    ... 
    >>> f
    <function f at 0x3ba538>
    >>> d = {}
    >>> d[f.func_code] = 'pass'

Since code objects are immutable, they can be used as dictionary keys.
Would that be sufficient for your needs?

Skip





More information about the Python-list mailing list