2015-08-27 97 views
3

我有一个编译的Python文件,path/program.pyc如何执行编译的Python代码

我想执行它与我目前的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时,我想要e输出:1

其实execfile()确实是我想要的,但它只适用于.py文件而不是.pyc文件。我正在寻找适用于.pyc文件的execfile()版本。

+1

你想在b中运行代码? –

+0

@PadraicCunningham是的,但我只有'b.pyc'而不是'b.py'。 – Sait

+1

一个简单的方法是对pyc进行uncompile,对于那些涉及很少开销的小文件。 https://github.com/wibiti/uncompyle2 –

回答

2

有可能是一个更好的办法,但使用uncompyle2获得源和execing会做你需要的东西:

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()) 

a应该输出1运行b.pyc

-3

使用__import__https://docs.python.org/2/library/functions.html#import

请注意,您需要使用标准的Python包的符号,而不是一个路径,你将需要确保您的文件是sys.path

喜欢的东西__import__('path.program', globals(), locals())应该做的伎俩。

+0

嘿,谢谢你的答案,但我不能让它工作。我用细节更新了我的问题。 – Sait

+0

当你导入一个python包时,你不会在末尾加上'.py'。再次看看我的例子,没有'.pyc' –

+0

当我使用'.pyc'而不是'.py'时出现同样的错误。 – Sait