Вопрос по python – Скомпилируйте PyPy в Exe

31

Я знаю, как скомпилировать файл CPython для exe с использованием cx_freeze, но возможно ли скомпилировать простую программу с использованием PyPy to Exe?

Это не дубликат, потому что предоставленная Вами ссылка ничего не решает и устарела в 2010 году, теперь у нас 2012 год. Возможно, с того времени что-то изменилось. Nuncjo
@RolandSmith Этот вопрос специально о чем-то спрашиваетunlike py2exe и др. в том смысле, что он не включает интерпретатор Python, и принял «Прекратить писать Python и начать использовать этот совершенно другой язык, который является подмножеством Python» как ответ. Этот вопрос просто требует аналогичного инструмента замораживания, который работает с PyPy и полным Python. user395760
возможный дубликатstackoverflow.com/questions/4251964/… Roland Smith
Это должно быть возможно, поскольку (совсем недавно) стало возможным встраивание PyPy:mail.python.org/pipermail/pypy-dev/2012-April/009726.html, Таким образом, все, что нужно, это exe-оболочка, которая также содержит zip-библиотеку и скрипты. Любой берущий? TryPyPy
@ AoeAoe Что за черт? Ваши заявления предают большую путаницу и / или недоразумение. (1) Интерпретируемый / скомпилированный не является свойством языка программирования, он является свойством реализаций языка программирования. Любой язык может быть скомпилирован и интерпретирован, включая Python. (2) Преобразование кода в какой-либо другой язык (скажем, C) является в точности определением компилятора. (3) Весь смысл инструментов, подобных тем, которые обсуждались здесь, заключается в использовании существующих интерпретаторов для исполняемого производства. [Я мог бы продолжить с незначительными пунктами, но место для комментариев заканчивается.] user395760

Ваш Ответ

2   ответа
-1

compile.py

#!/usr/bin/env python
# Corey Goldberg

from distutils.core import setup
import py2exe
import sys

if len(sys.argv) == 2:
    entry_point = sys.argv[1]
    sys.argv.pop()
    sys.argv.append('py2exe')
    sys.argv.append('-q')
else:
    print 'usage: compile.py <python_script>\n'
    raw_input('press ENTER to exit...')
    sys.exit(1)

opts = {
    'py2exe': {
        'compressed': 1,
        'optimize': 2,
        'bundle_files': 1
    }
}

setup(console=[entry_point], options=opts, zipfile=None)
@CeesTimmerman. Ваши комментарии касались только второй части комментария Делнана, так что это по-прежнему не является «практическим ответом». В любом случае я согласен с делнаном. Лучше полностью описать решение в ответе, чем просто предоставить ссылку на другой сайт (который может сломаться в любой момент).
@delnan: поскольку py2exe не выдает один файл в качестве вывода, если вы не укажете его с помощью параметров, на которые ссылается secumind.
@CeesTimmerman Конечно, эта опция, наряду с другими, которые могут быть полезны для OP, где-то задокументирована.
-1 py2exe делаетnot работать с PyPy (по крайней мере, в настоящее время) - пожалуйста, сначала сделайте небольшое исследование. И почему вы ссылаетесь на какой-то неясный сценарий установки проекта, а не на проект py2exe?
@delnan: здесь приветствуются практические ответы. Конечно, люди могут вставить «py2exe» в их панель поиска.
7

не существует готового способа или учебника о том, как создать EXE из программы с использованием интерпретатора PyPy. И я боюсь, что это не совсем тривиально.

В принципе, существует два способа использования переводов PyPy для получения EXE-файла: либо интерпретатор PyPy, либо написание своей собственной программы RPython (интерпретатор PyPy сам является программой RPython, то есть использует ограниченное подмножество Python) ,

Если ваша программа использует ограниченное подмножество RPython и никаких зависимостей, вы можете изучить использование сценария перевода вPyPy / переводчик / цель где вы также найдете много целевых * .py файлов. Возьмите один и измените его для своих целей. Сначала вы можете поиграть с переводом функций Python, начиная с этого:

http://doc.pypy.org/en/latest/getting-started-dev.html#trying-out-the-translator

Если ваша программа является приложением и зависит от внешних пакетов, вы должны сначала попытаться убедиться, что ваша программа вообще работает на pypy - поддерживаются не все внешние библиотеки. Затем вы можете изучить изменение сценария targetpypystandalone для загрузки модулей вашего приложения. Если вы сомневаетесь, попробуйте получить помощь в списке рассылки pypy-dev или на канале #pypy на irc.freenode.net.

@ hpk42 После 2013 года мы можем использоватьpypy/rpython/bin/rpython переводить. Также,the RPython doc доступен.
Одним из недостатков RPython является то, что он недокументирован, и, если ваш код не следует ему, транслятор потерпит неудачу с совершенно непонятными сообщениями об ошибках. (Например, попытка использовать именованный кортеж приводит к ошибке, что объект FrozenDesc не имеет атрибута allenforced_attrs.)

Похожие вопросы