我有一个用python 2.7
编写的应用程序。在我的应用程序中,我想让用户能够编译python源文件(即py
到pyc
)。
内置compile
函数执行此操作,但输出文件仅与python 2.7
兼容。
我想要的是将文件编译为一系列不同的python版本(特别是python 2.5
,2.6
& 2.7
)
我知道解决这个问题的一种方法是在每个版本中重写我的应用程序,只使用内置的compile
函数,但我不想这样做。
我愿意接受所有建议,包括编写C扩展,嵌入python等......
修改
我正在编写的应用程序是一个允许在pyinstaller exe中注入/修改任意代码的工具。
现在您可能知道pyinstaller实际上将已编译的python源文件放在exe中。 我的应用程序只是提取这些嵌入的pyc文件,反编译它们,允许用户修改它们,然后重建exe。
由于exe可以来自不同的python版本,所以我需要将反编译输出编译成该版本的功能。
以下是该应用的截图。
答案 0 :(得分:1)
我用不同的方法解决了自己的问题。
现在,我的主应用程序是用python 2.7
编写的。我写了2 dll
,每个都嵌入了python解释器。在一个嵌入式python 2.6
和其他python 2.5
中。
这两个dll中的每一个都使用Python C API来编译作为相应python版本的参数给出的脚本。
现在,从我的主应用程序(用python 2.7
编写),我使用ctypes
从这两个dll调用导出的函数。要编译的脚本作为参数传递。
使用这种方法,我能够将给定的脚本编译为3个python版本中的任何一个。