Создание единого исполняемого файла из проекта Python
Я хочу создать единый исполняемый файл из моего проекта Python. Пользователь должен иметь возможность загружать и запускать его без необходимости установки Python. Если бы я просто распространял пакет, я мог бы использовать pip, wheel и PyPI для его сборки и распространения, но для этого требуется, чтобы пользователь владел Python и знал, как устанавливать пакеты. Что я могу использовать для создания автономного исполняемого файла из проекта Python?
Переведено автоматически
Ответ 1
Существует несколько различных способов сделать это.
Первый и, вероятно, наиболее распространенный способ - использовать программы в стиле "freeze". Эти программы работают путем объединения Python и вашей программы, по сути, объединяя их в единый исполняемый файл.:
PyInstaller:
Веб-сайт || Репозиторий || PyPI
Поддерживает Python 3.7 - 3.10 в Windows, Mac и Linux.
cx_Freeze:
Веб-сайт || Репозиторий || PyPI
Поддерживает Python 3.6 - 3.10 в Windows, Mac и Linux.
py2exe:
Веб-сайт || Репозиторий || PyPI
Поддерживает Python 3.7 - 3.10 только в Windows.
py2app:
Веб-сайт || Репозиторий || PyPI
Поддерживает Python 3.6 - 3.10 только на компьютерах Mac.
Главное, что следует иметь в виду, это то, что программы такого типа обычно создают exe-файл только для той операционной системы, в которой вы его запускаете. Так, например, запуск Pyinstaller в Windows приведет к созданию Windows exe, но запуск Pyinstaller в Linux приведет к созданию Linux exe. Если вы хотите создать исполняемый файл для нескольких операционных систем, вам придется изучить возможность использования виртуальных машин или чего-то вроде Wine.
Конечно, это не единственный способ сделать что-либо:
pynsist:
Веб-сайт || Репозиторий || PyPI
Pynsist создаст установщик Windows для вашей программы, который установит Python непосредственно на компьютер пользователя, вместо того, чтобы связывать его с вашим кодом, и создаст ярлыки, которые ссылаются на ваш скрипт Python.
Для запуска самого инструмента pynsist требуется Python 3.5+, но он поддерживает комплектацию вашей программы любой версией Python.
Pynsist создаст только установщики Windows, но может быть запущен из Windows, Mac и Linux. Смотрите их FAQ для получения более подробной информации.
Nuitka:
Веб-сайт || Репозиторий (зеркало Github) || PyPI
Nuitka буквально скомпилирует ваш код на Python и создаст exe-файл (в отличие от других проектов, которые просто включают Python), чтобы попытаться ускорить ваш код. В качестве побочного эффекта вы также получите удобный исполняемый файл, который сможете распространять. Обратите внимание, что в вашей системе должен быть доступен компилятор C ++.
Поддерживает Python 2.6 - 2.7 и Python 3.3 - 3.10 в Windows, Mac и Linux.
cython:
Веб-сайт || Репозиторий || PyPI
Cython похож на Nuitka тем, что это компилятор Python. Однако вместо прямой компиляции вашего кода он будет компилировать его в C. Затем вы можете взять этот код на C и превратить свой код в исполняемый файл. В вашей системе должен быть доступен компилятор C.
Поддерживает Python 2.7 и Python 3.3 - 3.11 в Windows, Mac и Linux.
Лично я предпочитаю использовать PyInstaller, поскольку мне было проще всего запустить его, он был разработан для хорошей работы с различными популярными библиотеками, такими как numpy или pygame, и имеет отличную совместимость с различными операционными системами и версиями Python.
Тем не менее, я также успешно создавал различные exes с использованием cx_Freeze без особых трудностей, поэтому вам также следует подумать о том, чтобы попробовать эту программу.
У меня еще не было возможности широко опробовать pynist, Nuitka или Cython, но они кажутся довольно интересными и инновационными решениями. Если у вас возникнут проблемы при использовании первой группы программ, возможно, стоит попробовать одну из этих трех. Поскольку они работают принципиально иначе, чем программы в стиле Pyinstaller / cx_freeze, они могут добиться успеха в тех нечетных крайних случаях, когда первая группа завершается неудачей.
В частности, я думаю, что pynist - хороший способ обойти всю проблему распространения вашего кода в целом: Mac и Linux уже имеют встроенную поддержку Python, и простая установка Python в Windows действительно может быть самым чистым решением. (Недостатком теперь является то, что вам нужно беспокоиться о настройке нескольких версий Python + установке библиотек).
Nuitka и Cython (по моему ограниченному опыту), похоже, работают довольно хорошо. Опять же, я сам их тщательно не тестировал, и поэтому мое основное наблюдение заключается в том, что для создания exe-файла им требуется гораздо больше времени, чем программам в стиле "freeze".
Как уже было сказано, преобразование вашей программы на Python в исполняемый файл не обязательно является единственным способом распространения вашего кода. Чтобы узнать больше о том, какие другие варианты доступны, смотрите следующие ссылки:
Ответ 2
По состоянию на июль 2022 годаpyinstaller находится в активной разработке. Вы можете увидеть последние изменения на GitHub. Поддерживается для Windows, Linux и macOS; 32 и 64-разрядные версии. Поддерживается Python версий 2.6, 2.7 и 3.3+.
Ответ 3
auto-py-to-exe - это графический интерфейс для PyInstaller.