Можно ли использовать PyPy/RPython для создания небольшого автономного исполняемого файла?

(Или «Можно ли использовать PyPy/RPython для компиляции/преобразования Python в C/C++ без использования среды выполнения Python?»)

Я пытался понять PyPy с его RPython и Python, его запуском, компиляцией и переводом, но потерпел неудачу.

У меня есть гипотетический проект Python (для Windows); Я хотел бы уменьшить его размер, порядка ста килобайт (O.N.O.), а не несколько мегабайт, которые влечет за собой использование py2exe (после UPX). Могу ли я каким-либо образом использовать PyPy1 для создания автономного исполняемого файла, который не зависит от Python26.dll? Если я могу, нужно ли следовать ограничениям RPython, таким как for, работающим только со встроенными типами, или это полный синтаксис Python?

Я понимаю, что если это можно сделать, я почти наверняка не смогу напрямую использовать модули C из Python.


1 (С тех пор, как мы спросили, ситуация прояснилась, и эта часть цепочки инструментов более четко обозначена как RPython, а не PyPy; в 2010 году это было не так.)< /эм>


person Chris Morgan    schedule 23.11.2010    source источник
comment
Это почти наверняка не создаст исполняемый файл такого маленького размера, как вы хотите, но, поскольку это связано, я подумал, что укажу, что cython утверждает, что теперь он может создавать автономные исполняемые файлы: wiki.cython.org/EmbeddingCython   -  person ʇsәɹoɈ    schedule 23.11.2010
comment
@Forest: я не знал, что Cython может это сделать, но из-за того, что требуется среда выполнения Python, я думаю, что она вряд ли станет (или, по крайней мере, намного) меньше, чем py2exe + UPX.   -  person Chris Morgan    schedule 23.11.2010


Ответы (1)


Да, PyPy может создавать автономные исполняемые файлы из кода RPython. Это означает, что вам нужно следовать всем неуклюжим правилам RPython, когда дело доходит до написания кода. Ваш код Python вряд ли будет работать «из коробки», а перенос существующего кода Python обычно не доставляет удовольствия. Это не сделает исполняемые файлы такими же маленькими, как C, но, например, цель rpystone (из pypy/translator/goal) с использованием boehm GC составляет 80 КБ на 64-битной версии после удаления.

person fijal    schedule 23.11.2010
comment
Спасибо за это. Это то, что я хотел знать и ожидал ответа. Второстепенный вопрос, связанный с тем, что я забыл спросить, можно ли в этом получить доступ к Windows API через PyPy? Будет ли работать ctypes.windll или будет сложнее? - person Chris Morgan; 23.11.2010
comment
ctypes не работает в RPython. Существует интерфейс C, он называется rffi, grep для использования (модули используют его). Там и сям представлено довольно много API Windows, загляните в исходный код (извините, но это все довольно внутренние вещи, без документации ;-) - person fijal; 23.11.2010