Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Кроме того, если не указано иное, все программы, перечисленные ниже, будут создавать exe файл специально для операционной системы, в которой он запущен. Так, например, запуск Pyinstaller в Windows приведет к созданию exe файла Windows, но запуск Pyinstaller в Linux приведет к созданию exe файла для 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.7 (?) В Windows, Mac и Linux.
  • pyapp:

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

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


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

  • pynsist:

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

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

  • Nuitka:

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

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

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

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

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

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

Нуитка и Cython (в моем ограниченном опыте), кажется, работают довольно хорошо. Опять же, я сам их не тестировал, и поэтому мое основное наблюдение заключается в том, что на создание exe файлов у них, похоже, уходит гораздо больше времени, чем в программах "заморозки".

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

Ответ 2

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

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

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

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

Update

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