Превращение Python кода в исполняемый exe: подробное руководство

Раздел: Разработка на Python -> IDE и редакторы

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

Создание .exe файла из Python скрипта позволяет распространять приложение без необходимости установки интерпретатора и зависимостей. Пользователи могут запускать программу как обычное Windows приложение. Рассмотрим основные инструменты и подходы.

PyInstaller: универсальное решение

PyInstaller является наиболее популярным и поддерживаемым инструментом. Он поддерживает Python 3.8+ и умеет автоматически находить большинство зависимостей.

Установка:

pip install pyinstaller

Pip tools python (pip tools в python)

Базовая сборка:

# файл hello.py
print("Hello, World!")

Python build tools (python build tools (инструменты сборки))

pyinstaller hello.py

Python packaging tools (python packaging tools (инструменты сборки))

После выполнения команды в папке dist/hello/ появится hello.exe. По умолчанию создаётся папка с множеством вспомогательных файлов. Для получения одного файла используйте ключ --onefile.

pyinstaller --onefile hello.py

Python online код (онлайн редактор python)

Готовый hello.exe окажется в dist/. Запуск его приведёт к выводу строки в консоль.

cx_Freeze: классический вариант

Как собрать exe через cx_Freeze?

cx_Freeze является одним из старейших инструментов. Подходит для проектов, где требуется тонкая настройка включений и исключений.

Установка:

pip install cx-freeze

Find python script (поиск python скрипта)

Пример setup.py:

from cx_Freeze import setup, Executable

setup(
    name = "Hello",
    version = "1.0",
    description = "Simple app",
    executables = [Executable("hello.py")]
)

Compiled python file (скомпилированные файлы python (.pyc))

Сборка выполняется командой:

python setup.py build

где писать код на python (где писать код на python)

В результате в папке build/exe.win-amd64-3.x/ появится hello.exe и сопутствующие DLL.

Типичные ошибки:

  • Отсутствие некоторых модулей (например, numpy) - требуется добавить их в options={'includes': [...]}.
  • Проблемы с кодировкой путей - рекомендуется указывать абсолютные пути.

Nuitka: компиляция с оптимизацией

Как получить более производительный exe с помощью Nuitka?

Nuitka транслирует Python код в C++ и компилирует его, что даёт прирост скорости и меньший размер при правильной настройке.

Установка:

pip install nuitka

File manager python (файловый менеджер на python)

Пример сборки:

nuitka --standalone --onefile hello.py

Microsoft vs python (python в visual studio)

Ключ --standalone создаёт автономную папку, --onefile - один exe. Результат в папке hello.dist/ или одиночный hello.exe.

Возможные сложности:

  • Не все библиотеки поддерживаются напрямую - требуется использование --include-package.
  • Первая сборка может быть долгой из-за компиляции C++.

py2exe: для устаревших проектов

Когда стоит использовать py2exe?

py2exe работает только под Windows и поддерживает Python до 3.4 (неофициально существуют форки для 3.7). Подходит для поддержки старого кода.

Установка:

pip install py2exe

Microsoft code python (настройка python в visual studio code)

Пример setup.py:

from distutils.core import setup
import py2exe

setup(
    console=["hello.py"],
    options={"py2exe": {"bundle_files": 1}},
    zipfile=None
)

Format python code (форматирование кода python)

Запуск:

python setup.py py2exe

Результат в папке dist/. Опция bundle_files: 1 упаковывает все в один exe.

Ограничения:

  • Нет поддержки Python 3.x выше 3.4.
  • Проблемы с современными библиотеками (например, Pillow, PyQt6).

Общие проблемы и их решения

  • Антивирусные срабатывания. Исполняемые файлы из Python часто детектируются как ложные угрозы. Попробуйте подписать файл или использовать --upx сжатие (уменьшает размер).
  • Отсутствие модулей. Используйте --hidden-import для PyInstaller или явно указывайте includes в spec-файле.
  • Большой размер файла. Собирайте с --onefile и --upx. Удаляйте неиспользуемые зависимости.
  • Ошибка при запуске на другой системе. Собирайте на той же версии Windows (или используйте Docker). Убедитесь, что нет привязок к конкретным путям.
- редактор python (редактор для python)
- Python py exe (создание exe-файла из python скрипта)
- Python install py (установка пакетов python через pip)

Расширенные примеры использования PyInstaller

Рассмотрим более сложные сценарии сборки с демонстрацией команд и результатов.

Сборка с иконкой и одним файлом

Команда:

Пример
pyinstaller --onefile --icon=myicon.ico hello.py

Результат: в папке dist/ создаётся hello.exe с указанной иконкой. Размер около 5–7 МБ.

Вывод консоли при сборке:

...
INFO: Building EXE from EXE-00.toc completed successfully.
INFO: Removing temporary files...
INFO: Building EXE completed.

Сборка без консоли (GUI приложение)

Для программ с графическим интерфейсом (Tkinter, PyQt) консоль не нужна.

Пример
pyinstaller --windowed --onefile --icon=app.ico myapp.py

После сборки myapp.exe не открывает окно консоли при запуске.

Добавление дополнительных файлов (data)

Если приложение использует файлы конфигурации, изображения или звуки, их можно включить в сборку.

Пример
pyinstaller --add-data "resources;resources" --onefile myapp.py

После распаковки временной папки ресурсы будут доступны по относительному пути resources/. Для корректного пути в коде используется sys._MEIPASS.

Пример
import sys
import os
def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath('.'), relative_path)

# Использование
path = resource_path('resources/image.png')

Работа со spec-файлом для точной настройки

PyInstaller генерирует .spec файл при первой сборке. Его можно редактировать для тонкой настройки.

Пример
pyi-makespec --onefile --name myapp hello.py
# Редактируем myapp.spec, добавляя hiddenimports, datas, excludes

Пример содержимого spec-файла:

Пример
a = Analysis(['hello.py'],
             pathex=[],
             binaries=[],
             datas=[('data.txt', '.')],
             hiddenimports=['numpy', 'pandas'],
             hookspath=[],
             runtime_hooks=[],
             excludes=['tkinter'],
             win_no_prefer_redirects=False,
...) 
pyz = PYZ(a.pure)
exe = EXE(pyz, a.scripts, ...)

Затем сборка:

Пример
pyinstaller myapp.spec

Этот метод позволяет избежать повторного указания ключей командной строки и даёт полный контроль.

Скрытые импорты для динамически загружаемых модулей

Некоторые библиотеки, например, pytest или openpyxl, не обнаруживаются автоматически. Используйте --hidden-import:

Пример
pyinstaller --hidden-import=openpyxl --onefile report.py

Можно указать несколько импортов через запятую или повторить ключ.

Сборка с UPX сжатием

UPX уменьшает размер исполняемого файла. Скачайте upx.exe или upx (для Linux) и укажите путь.

Пример
pyinstaller --upx-dir=C:\tools\upx --onefile hello.py

Размер файла может уменьшиться на 30–50%. Результат аналогичен примеру 1, но с меньшим размером.

Использование виртуального окружения для изоляции

Рекомендуется создавать отдельное виртуальное окружение для сборки, чтобы избежать лишних пакетов.

Пример
python -m venv build_env
build_env\Scripts\activate
pip install pyinstaller
pip install -r requirements.txt  # только нужные библиотеки
pyinstaller --onefile myapp.py

Это минимизирует размер exe и предотвращает включение случайных модулей.

Сборка многомодульного проекта

Если проект состоит из нескольких файлов (например, main.py, utils.py, gui.py), достаточно указать точку входа.

Пример
pyinstaller --onefile main.py

PyInstaller автоматически найдёт импорты. В spec-файле можно явно добавить все файлы в datas при необходимости.

Сборка с заданным именем выходного файла

Пример
pyinstaller --name MyApp --onefile hello.py

Вместо hello.exe получится MyApp.exe.

Создание exe-файла из Python скрипта - comments

En
Python py exe (python)