Оптимизация размера встроенного интерпретатора Python
Я провел последние 3 часа, пытаясь выяснить, можно ли отключить или создать Python без интерактивного режима или как я могу получить размер исполняемого файла python меньше для linux.
Как вы можете догадаться об этом для встроенного устройства, и после кросс-компиляции Python имеет размер около 1 МБ, и это слишком много для меня.
Теперь вопросы:
Есть ли возможности сжать исполняемый файл Python? Возможно, отключить интерактивный режим (запуск программ Python в командной строке).
Я искал параметры настройки и пробовал некоторые из них, но он не вносит никаких изменений в мой исполняемый файл.
Я скомпилирую его с оптимизированными опциями из gcc, и он уже лишен.
Ответы
Ответ 1
Если вы действительно хотите сжать python, вы можете посмотреть на этот проект:
http://code.google.com/p/python-on-a-chip/
как сказано на сайте:
Python-on-a-Chip (p14p) - это проект по разработке сокращенного Виртуальная машина Python (под кодовым названием PyMite), которая выполняет значительную подмножество языка Python на микроконтроллерах без ОС. другие части p14p - это драйверы устройств, библиотеки высокого уровня и другие инструменты. Присоединяйтесь к группе google python-on-a-chip для обсуждения этот проект.
Это может быть немного ниже, чем ожидалось, но он действительно сжимается:
Особенности PyMite VM:
- Требуется примерно 55 КБ программной памяти
- Инициализирует в ОЗУ 4 КБ; print "hello world" нуждается в 5KB; 8 КБ - это минимальная рекомендуемая оперативная память.
- Поддерживает целые числа, поплавки, кортежи, списки, dicts, функции, модули, классы, генераторы, декораторы и блокировки.
- Поддерживает 25 из 29 ключевых слов и 89 из 112 байт-кодов от Python 2.6
Вы можете получить интересные идеи из этого проекта.
Помните, что вы получаете только виртуальную машину, т.е. вы можете запускать pyc файлы, а не py. (pyc файлы - кросс-платформа, но и намного меньше файлов py)
На самом деле, если вы действительно нацелены на самый маленький питон, вам нужно отключить части библиотеки, но, возможно, и сам компилятор.
На этом сайте могут быть интересные указатели: http://www.awaretek.com/pymo.html
Ответ 2
Могут быть способы, которыми вы можете втиснуть его немного больше, просто настраивая, но не намного больше.
Кроме того, реальный код интерактивного режима довольно тривиален, поэтому я сомневаюсь, что вы многое там сохраните.
Я уверен, что есть более существенные функции, которые вы не используете, чтобы вы могли вырваться из интерпретатора, чтобы уменьшить размер. Например, вы, вероятно, можете выбросить большой кусок анализатора и компилятора и просто иметь дело только с байт-кодом. Проблема в том, что единственный способ сделать это - взломать источник интерпретатора. (И это не самый красивый код в мире, поэтому вам придется посвятить много времени изучению вашего пути.) И вы должны будете знать, какие функции вы действительно можете взломать.
Единственной реальной альтернативой было бы написать меньший интерпретатор для языка, подобного Python, например, путем подбора проекта tinypy. Но из ваших комментариев это звучит не так, как если бы "Python-like" достаточно для вас, если он не очень близок.
Ну, я полагаю, есть еще одна альтернатива: взломать другую, более приятную реализацию Python, чем CPython. Проблема в том, что Jython и IronPython не являются внутренним кодом (хотя, может быть, вы можете использовать собственный компилятор JVM- > или, возможно, достаточно зашифровать Jython в J2ME JVM?), А PyPy действительно не готов к прайм-тайму на встроенных системы. (Можете ли вы подождать пару лет?) Итак, вы, вероятно, застряли в CPython.
Ответ 3
Я столкнулся с этим вопросом в конце 2018 года. На данный момент самым популярным крошечным питоном - и разработанным специально для платформ с ограниченным доступом и встроенных устройств - является MicroPython, который популярен для таких вещей, как микроконтроллеры.