如何执行编译后的 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() 版本。

使用__import__

请注意,您需要使用标准的 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.