pythonpyc

How to execute compiled python code


I have a compiled Python file, path/program.pyc.

I want to execute it with my current globals() and locals(). I tried:

with open('path/program.pyc','rb') as f:
   code = f.read()
   exec(code, globals(), locals())

More specifically, what I want to have is:

a.py:

a = 1
# somehow run b.pyc

b.py:

print(a)

When I run a.py, I want to see the output: 1.

Actually execfile() does exactly what I want, but it only works for .py files not .pyc files. I am looking for a version of execfile() that works for .pyc files.


Solution

  • There may be a better way but using uncompyle2 to get the source and execing will do what you need:

    a = 1
    
    import uncompyle2
    from StringIO import StringIO
    f = StringIO()
    uncompyle2.uncompyle_file('path/program.pyc', f)
    f.seek(0)
    exec(f.read(), globals(), locals())
    

    Running b.pyc from a should output 1.