Возможно ли скомпилировать Python изначально (помимо байтового кода pyc)?
-
03-07-2019 - |
Вопрос
Интересно, возможно ли создать исполняемый модуль из скрипта Python.Мне нужно иметь максимальную производительность и гибкость Python-скрипта без необходимости запуска в среде Python.Я бы использовал этот код для загрузки пользовательских модулей по требованию для настройки моего приложения.
Решение
- Там есть пирекс который компилирует python-подобный исходный код в модули расширения python
- rpython который позволяет вам компилировать python с некоторыми ограничениями для различных бэкэндов, таких как C, LLVM, .Net и т.д.
- Есть также сброшенная кожа который переводит python на C ++, но я не могу сказать, хорошо ли это.
- ПыПи реализует JIT-компилятор, который пытается оптимизировать время выполнения путем перевода фрагментов того, что выполняется во время выполнения, в машинный код, если вы пишете для интерпретатора PyPy, это может быть приемлемым путем.
- Тот же автор, который работает над JIT в PyPy, написал psyco ранее, который оптимизирует python в интерпретаторе CPython.
Другие советы
Вы можете использовать что-то вроде py2exe для компиляции вашего скрипта python в exe-файл или заморозить его для двоичного файла Linux.
Я добился большого успеха, используя Китон, который основан на pyrex и расширяет его:
Cython - это язык, который делает написание расширений C для Python таким же простым, как и сам Python.Cython основан на хорошо известном Pyrex, но поддерживает более передовые функциональные возможности и оптимизации.
Язык Cython очень близок к языку Python, но Cython дополнительно поддерживает вызов C функций и объявление типов C для переменных и атрибутов класса.Это позволяет компилятору генерировать очень эффективный код C из кода Cython.
Это делает Cython идеальным языком для переноса во внешние библиотеки C и для быстрых модулей C, которые ускоряют выполнение кода Python.
Я думаю, вы можете использовать jython для компиляции python в байт-код Java, а затем скомпилировать это с помощью GCJ.