问题
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.
回答1:
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.
回答2:
Use __import__ https://docs.python.org/2/library/functions.html#import
Note that you need to use standard python package notation rather than a path and you will need to make sure your file is on sys.path
Something like __import__('path.program', globals(), locals()) should do the trick.
来源:https://stackoverflow.com/questions/32259786/how-to-execute-compiled-python-code