2014-02-13 90 views
3

我有一個編寫在python 2.7中的應用程序。在我的應用程序中,我想讓用戶能夠編譯一個python源文件(即pypyc)。編譯爲不同的python版本

內置compile函數執行此操作,但輸出文件僅與python 2.7兼容。

我要的是該文件編譯成各種不同的Python版本(特別是蟒蛇2.52.6 & 2.7

我知道,解決這個問題的方法是重新寫在我的每一個應用這些版本,只是使用內置的compile功能,但我不想這樣做。

我向所有人開放的建議,包括編寫C擴展,內嵌Python等..

編輯

,我正在寫的應用程序是一個工具,它允許注入/修改任意代碼裏面一個pyinstaller exe文件。

現在你可能已經知道pyinstaller實際上把編譯好的python源文件放在exe文件中。 我的應用程序只是提取這些嵌入式pyc文件,反編譯它們,允許用戶修改它們,然後重新生成exe文件。

由於exe可以來自不同的python版本,所以我需要將反編譯的輸出編譯爲該版本的功能。

下面是該應用程序的屏幕截圖。

enter image description here

+2

爲什麼你需要這樣做?如果你使用像pip這樣的Python安裝工具,那麼在安裝時就已經完成了。如果在導入時有寫權限,那麼Python在運行代碼時會自動執行此操作。 –

+0

而內建的'compile()'函數不會產生'.pyc'文件。您可以使用['compileall'模塊](http://docs.python.org/2/library/compileall.html)讓Python爲整個目錄或單個文件生成這些文件。例如,只需使用'python-2.5 -m compileall/path/to/project'就可以使用Python 2.5解釋器。 –

+1

'pyinstaller'用特定的Python版本**安裝代碼**。有**不需要**在那裏預編譯。 –

回答

1

我解決我自己的問題在不同的方法。

現在,我的主要應用程序是用python 2.7編寫的。我寫了2 dll其中每個都嵌入了python解釋器。在一個嵌入python 2.6和其他python 2.5。 這兩個dll中的每一個都使用Python C API來編譯腳本,作爲相應python版本的參數。

現在,從我的主應用程序(用python 2.7編寫),我用​​來調用這兩個dll的導出函數。編譯的腳本作爲參數傳遞。

使用這種方法,我能夠編譯一個給定的腳本到任何3個python版本。

相關問題