如何执行编译后的 python 代码
How to execute compiled python code
我有一个已编译的 Python 文件,path/program.pyc
。
我想用我目前的 globals()
和 locals()
执行它。我试过了:
with open('path/program.pyc','rb') as f:
code = f.read()
exec(code, globals(), locals())
更具体地说,我想要的是:
a.py:
a = 1
# somehow run b.pyc
b.py:
print(a)
当我运行a.py
时,我想看到输出:1
.
实际上 execfile()
完全符合我的要求,但它仅适用于 .py
个文件,不适用于 .pyc
个文件。我正在寻找适用于 .pyc
个文件的 execfile()
版本。
请注意,您需要使用标准的 python 包符号而不是路径,并且您需要确保您的文件位于 sys.path
像 __import__('path.program', globals(), locals())
这样的东西应该可以解决问题。
可能有更好的方法,但使用 uncompyle2 获取源代码并执行即可满足您的需要:
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())
运行 b.pyc
来自 a
应该输出 1
.
我有一个已编译的 Python 文件,path/program.pyc
。
我想用我目前的 globals()
和 locals()
执行它。我试过了:
with open('path/program.pyc','rb') as f:
code = f.read()
exec(code, globals(), locals())
更具体地说,我想要的是:
a.py:
a = 1
# somehow run b.pyc
b.py:
print(a)
当我运行a.py
时,我想看到输出:1
.
实际上 execfile()
完全符合我的要求,但它仅适用于 .py
个文件,不适用于 .pyc
个文件。我正在寻找适用于 .pyc
个文件的 execfile()
版本。
请注意,您需要使用标准的 python 包符号而不是路径,并且您需要确保您的文件位于 sys.path
像 __import__('path.program', globals(), locals())
这样的东西应该可以解决问题。
可能有更好的方法,但使用 uncompyle2 获取源代码并执行即可满足您的需要:
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())
运行 b.pyc
来自 a
应该输出 1
.