2014-02-13 3 views
3

У меня есть приложение, написанное в python 2.7. В моем приложении я хочу дать пользователям возможность скомпилировать исходный файл python (например, py - pyc).Компиляция в другую версию python

встроенный compile функция делает это, но выходной файл совместим только с python 2.7.

То, что я хочу, чтобы скомпилировать файл в диапазон различных версий питона (в частности, Python 2.5, 2.6 & 2.7)

Я знаю, что один из способов подойти к этой проблеме повторно написать мое приложение в каждом из эти версии и просто использовать встроенную функцию compile, но я не хочу этого делать.

Я открыт для всех предложений, в том числе написания расширения C, вложения питона и т.д. ...

EDIT

приложения, которое я пишу это инструмент, который позволяет вводить/изменять произвольный код внутри pyinstaller exe.

Теперь вы можете знать, что pyinstaller фактически ставит скомпилированные исходные файлы python в exe. Мое приложение просто извлекает эти встроенные файлы pyc, декомпилирует их, позволяет пользователю изменять их, а затем перестраивать exe.

Поскольку exe может быть из другой версии python, поэтому мне нужна функциональность для компиляции декомпилированного вывода в эту версию.

Вот скриншот этого приложения.

enter image description here

+2

Зачем вам это нужно? Если вы используете средство установки Python, например 'pip', это делается для вас при установке. И Python автоматически делает это при запуске кода в любом случае при условии, что во время импорта есть доступ на запись. –

+0

И встроенная функция 'compile()' делает ** не ** создает '.pyc' файлы. Вы можете использовать ['compileall' module] (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 и внутри другого питона 2.5. Каждая из этих двух библиотек использует API Python C для компиляции скрипта, заданного в качестве аргумента для соответствующей версии python.

Теперь, из моего основного приложения (написанного на python 2.7), я использовал ctypes для вызова экспортируемых функций из этих двух библиотек dll. Сценарий для компиляции был передан в качестве аргумента.

Используя этот подход, я смог скомпилировать данный сценарий для любой из трех версий python.

Смежные вопросы