Создайте единственный исполняемый файл из проекта Python

87

Я хочу создать единственный исполняемый файл из моего проекта Python. Пользователь должен иметь возможность загрузить и запустить его без установки Python. Если бы я просто распространял пакет, я мог бы использовать pip, wheel и PyPI для его сборки и распространения, но для этого требуется, чтобы у пользователя был Python и он знал, как устанавливать пакеты. Что я могу использовать для создания автономного исполняемого файла из проекта Python?

ShadowFlame
источник
Я все еще пишу в версии 2.x (точнее, 2.7.2), но, возможно, увижу необходимость перехода на 3.x (если модули и т.п. совместимы), и тогда мне понадобится решение.
ShadowFlame
Учтите, что упаковка сильно усложнит диагностику проблемы. Не только у вас (или pdb) нет легкого доступа к исполняемым файлам, py2exe(не знаю о других) не включает .pyфайлы, поэтому вы не увидите исходные строки в трассировках стека.
ivan_pozdeev
Интересно, что я начал использовать pyinstaller
ShadowFlame

Ответы:

115

Вот несколько распространенных. Если явно не указано иное, все перечисленные ниже проекты активно поддерживаются на момент моего последнего редактирования (январь 2020 г.).

Я также включил ссылки на их соответствующие веб-сайты, репозитории и списки PyPi на тот случай, если вы хотите сами проверить, как часто они обновлялись.

Кроме того, если не указано иное, все программы, перечисленные ниже, создают исполняемый файл специально для той операционной системы, в которой он работает. Так, например, запуск Pyinstaller в Windows приведет к созданию исполняемого файла Windows, а запуск Pyinstaller в Linux создаст исполняемый файл Linux. Если вы хотите создать исполняемый файл для нескольких операционных систем, вам придется изучить использование виртуальных машин или что-то вроде Wine .


Все следующие программы работают одинаково - они объединяют Python и вашу программу, эффективно комбинируя их для создания исполняемого файла.

  • PyInstaller:

    • Ссылки : Сайт || Репо || PyPi
    • Поддерживает : Python 2.7 и Python 3.4 - 3.7 в Windows, Mac и Linux.
  • cx_Freeze:

    • Ссылки: Сайт || Репо || PyPi
    • Поддерживает: Python 2.7 и 3.5 - 3.8 в Windows, Mac и Linux.
  • py2app:

    • Ссылки: Сайт || Репо || PyPi
    • Поддерживает: Python 2.7 и 3.3 (?) - 3.7 (?) Только на Mac.
    • Примечание. На момент моего последнего редактирования мне не удалось окончательно определить точный диапазон версий Python, поддерживаемых pyapp. В последнем выпуске упоминается поддержка Python 3.7.

Примечание: предыдущие версии этого поста включали записи для py2exe ( репо ) и bbfreeze ( репо ). Оба проекта были удалены из этого списка: в течение нескольких лет они практически не проявляли активности и, похоже, полностью не поддерживаются. См. Историю изменений для старых записей.


Конечно, это не единственный способ делать что-то:

  • пинсист:

    • Ссылки: Сайт || Репо || PyPi
    • Поддерживает: все версии Python? Примечание - будут созданы только установщики Windows .
    • Другие примечания: Pynsist, похоже, поддерживает объединение любой произвольной версии Python с вашим приложением. Однако для работы самого инструмента требуется Python 3.5+.

      Pynsist создаст установщик Windows для вашей программы, который будет напрямую устанавливать Python на компьютер пользователя, вместо того, чтобы связывать его с вашим кодом, и создавать ярлыки, которые ссылаются на ваш скрипт Python. Хотя эта программа создает только установщики для Windows, похоже, что вы все еще можете запускать Pynsist на компьютерах Mac и Linux.

  • Нуитка:

    • Ссылки: Сайт || Репо (зеркало Github) || PyPi
    • Поддерживает: Python 2.6 - 2.7 и Python 3.3 - 3.7 в Windows, Mac и Linux.
    • Другие примечания: Nuitka буквально скомпилирует ваш код Python и создаст exe (в отличие от других проектов, которые просто включают Python), чтобы попытаться ускорить ваш код. В качестве побочного эффекта вы также получите удобный исполняемый файл, который сможете распространять. Обратите внимание, что в вашей системе должен быть доступен компилятор C ++ .
  • cython:

    • Ссылки: Сайт || Репо || PyPi
    • Поддерживает: Python 2.6 - 2.7 и Python 3.2 - 3.8 в Windows, Mac и Linux.
    • Другие примечания: Cython похож на Nuitka в том, что это компилятор Python. Однако вместо того, чтобы напрямую компилировать ваш код, он скомпилирует его на C. Затем вы можете взять этот код C и превратить свой код в exe . В вашей системе должен быть доступен компилятор C.

Лично я предпочитаю использовать PyInstaller, так как мне было проще всего начать работу, он был разработан для удобной работы с различными популярными библиотеками, такими как numpy или pygame, и имеет отличную совместимость с различными ОС и версиями Python.

Тем не менее, я также успешно создал различные exes с использованием cx_Freeze без особых трудностей, так что вам также следует подумать о том, чтобы попробовать эту программу.

У меня еще не было возможности всесторонне опробовать pynist, Nuitka или Cython, но они кажутся довольно интересными и инновационными решениями. Если у вас возникнут проблемы с использованием первой группы программ, возможно, стоит попробовать одну из этих трех. Поскольку они работают принципиально иначе, чем программы в стиле Pyinstaller / cx_freeze, они могут преуспеть в тех странных случаях, когда первая группа терпит неудачу.

В частности, я думаю, что pynist - это хороший способ полностью обойти проблему распространения вашего кода: Mac и Linux уже имеют встроенную поддержку Python, и простая установка Python в Windows действительно может быть самым чистым решением. (Обратной стороной является то, что вам нужно беспокоиться о таргетинге на несколько версий Python + установка библиотек).

Nuitka и Cython (по моему ограниченному опыту) работают довольно хорошо. Опять же, я сам не тестировал их тщательно, и поэтому мое главное наблюдение состоит в том, что они, похоже, занимают гораздо больше времени для создания exe, чем программы в стиле «замораживания».


При этом преобразование вашей программы Python в исполняемый файл - не обязательно единственный способ распространения вашего кода. Чтобы узнать больше о доступных вариантах, перейдите по следующим ссылкам:

Майкл0x2a
источник
1
Обратите внимание , что вам также необходимо включить в вашем скрепляйте Microsoft C ++ Redistributables (он же msvcrxx.dll, где xxэто номер версии) , чтобы сделать .exe запустить (или попросить пользователей установить его сами по себе). Это необходимо, потому что Python построен в Windows с использованием Visual Studio.
gaborous
Таким образом, похоже, что ни одна из IDE python (pycharm или pydev - плагин eclipse) еще не включила функцию компиляции в один исполняемый файл в саму среду IDE. Это верно? :-)
Nelda.techspiress
Если вы заботитесь о сохранности исходного кода, вероятно, Cython - лучший выбор, поскольку он компилирует код C. Те программы, которые используют технику замораживания , как правило, легко декомпилировать.
Мартин Де ла Фуэнте
PyInstaller указан выше как поддерживающий Python 3.7. Согласно моему опыту и описанию на pyinstaller.org, где говорится, что «PyInstaller работает с Python 2.7 и 3.3–3.6», это неверно.
Tom
1
@Tom - После того, как я немного покопался, похоже, что хотя сам pyinstaller поддерживает Python 3.7, они официально не выпустили новую версию с поддержкой 3.7. (Например, в их репозитории на github указано, что они поддерживают Python 3.7 +, похоже, что у них не осталось открытых проблем, связанных с 3.7, но последняя версия pyinstaller на PyPi выпущена с декабря 2017 года). Так что, если вам нужна поддержка 3.7, вы можете попробовать собрать + установить pyinstaller прямо из исходного кода или подождать до следующего выпуска. (Или, конечно, воспользуйтесь другой программой)
Michael0x2a
10

pyinstaller все еще находится в активной разработке. Вы можете увидеть последние изменения на GitHub.

Он поддерживает все три основные платформы:

  • Windows (32-битная и 64-битная)
  • Linux (32-бит и 64-бит)
  • Mac OS X (32-разрядная и 64-разрядная версии)

и поддерживает Python версий 2.6 и 2.7. Он не поддерживает Python 3, но есть экспериментальная ветка Python 3 .

Обновить

Начиная с версии 3.2.1 он поддерживает Python 2.7, 3.3-3.5.

терраса
источник
2

Лучшее использование, pip install auto-py-to-exeобеспечивающее красивый пользовательский интерфейс со всеми параметрами, необходимыми для создания исполняемого файла.

После установки просто введите auto-py-to-exeсвой терминал или командную строку.

Авто-py-to-exe

Ратнеш Кушваха
источник
Спасибо за то, что все еще отвечаете на такую ​​же старую ветку. Похоже, это потрясающая находка, которая действительно упрощает работу при настройке, а также предоставляет фактически используемую команду: D
ShadowFlame,