Инструменты создания EXE из Python скриптов

Раздел: Инструменты -> Упаковка

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

Упаковка Python программы в EXE файл позволяет запускать её на компьютерах без установленного интерпретатора. Рассмотрим наиболее эффективный инструмент и альтернативы.

Как конвертировать .py в .exe с помощью auto-py-to-exe?

auto-py-to-exe предоставляет графический интерфейс для PyInstaller. Его главное преимущество - наглядность и простота настройки.

Установка: выполняется через pip:

pip install auto-py-to-exe

Python auto py to exe (конвертация .py в .exe)

После установки запуск осуществляется командой:

auto-py-to-exe

В открывшемся окне нужно указать путь к скрипту, выбрать тип сборки (один файл или папка), добавить иконку, скрыть консоль (для GUI приложений) и нажать конвертацию.

Пример: для скрипта hello.py:

print('Hello, World!')

После конвертации в папке output появится hello.exe.

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

  • Ошибка 'Failed to execute script' - часто возникает из-за отсутствия зависимых файлов. Решение: добавить их в сборку через раздел 'Additional Files'.
  • Большой размер EXE - можно уменьшить, исключив ненужные модули (например, через флаг --exclude-module).
  • Антивирус блокирует EXE - подписать файл цифровой подписью или упаковать через UPX.

auto-py-to-exe идеально подходит для быстрого создания дистрибутивов для Windows без погружения в командную строку.

Как создать EXE с помощью PyInstaller напрямую?

PyInstaller - базовая консольная утилита, на которой построен auto-py-to-exe. Команды дают больше контроля.

Пример базовой сборки:

pyinstaller --onefile hello.py

Флаг --onefile создаёт единственный EXE. Флаг --noconsole скрывает окно консоли.

Сборка с опциями:

pyinstaller --onefile --windowed --icon=app.ico --add-data 'data.txt;.' hello.py

Здесь --windowed для GUI, --icon задаёт иконку, --add-data включает дополнительные файлы.

Проблема: при использовании --onefile временные файлы извлекаются в Temp, что может замедлить запуск. Решение: использовать --onedir.

Как упаковать скрипт с помощью cx_Freeze?

cx_Freeze - альтернатива, поддерживающая кросс-платформенную сборку. Требует файл setup.py.


from cx_Freeze import setup, Executable

setup(
    name = 'MyApp',
    version = '1.0',
    description = 'Sample app',
    executables = [Executable('hello.py', base='Win32GUI')]
)
  

Запуск сборки:

python setup.py build

Цель: когда требуется строго контролировать процесс через скрипт.

Как конвертировать .py в .exe с помощью Nuitka?

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

nuitka --standalone --onefile hello.py

Особенность: требует установленный компилятор C (MinGW или MSVC). Размер итогового файла может быть меньше, чем у PyInstaller.

Как создать EXE с помощью py2exe?

py2exe - старый инструмент, подходит для устаревших проектов. Требует Python 2 или 3 (отдельная версия).


from distutils.core import setup
import py2exe

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

Сборка:

python setup.py py2exe

Используется в крайних случаях, когда другие инструменты не подходят.

Расширенные примеры конвертации .py в .exe

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

Пример 1: Однофайловый EXE с иконкой и скрытием консоли (PyInstaller)

Пример

# script.py
import tkinter as tk
root = tk.Tk()
tk.Label(root, text='Hello from EXE').pack()
root.mainloop()

Команда сборки:

Пример

pyinstaller --onefile --windowed --icon=icon.ico --name MyApp script.py

Результат: в папке dist появится MyApp.exe размером ~10 МБ. Запуск без консоли.

> MyApp.exe
(открывается окно Tkinter)

Пример 2: Использование spec-файла для тонкой настройки

Пример

# myscript.py
import sys
print('Arguments:', sys.argv)

Создаём spec-файл:

Пример

pyi-makespec --onefile --noconsole myscript.py

Редактируем myscript.spec, добавляем исключения:

Пример

a = Analysis(['myscript.py'],
             pathex=[],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=['tkinter', 'PyQt5'],  # исключаем GUI-библиотеки
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

Сборка:

Пример

pyinstaller myscript.spec

Результат: EXE без ненужных модулей, размер уменьшен.

Пример 3: Упаковка проекта с несколькими файлами и папками

Пример

# main.py
from utils import helper
helper.greet()

# utils/helper.py
def greet():
    print('Hello from module')

# data/config.json
{"key": "value"}

Команда с добавлением данных:

Пример

pyinstaller --onedir --add-data "data;data" --add-data "utils;utils" main.py

Результат: папка dist/main/ содержит все файлы и data, utils.

Пример 4: Сборка с UPX-сжатием для уменьшения размера

Пример

# Скачать UPX (upx.github.io) и указать путь
pyinstaller --onefile --upx-dir C:\upx hello.py

Размер до сжатия: 8.5 МБ, после: 3.2 МБ.

Пример 5: Сборка с помощью Nuitka с оптимизацией

Пример

nuitka --standalone --onefile --enable-plugin=tk-inter --windows-disable-console --output-dir=build hello.py

Результат: EXE ~5 МБ, запуск быстрее PyInstaller.

Пример 6: Кросс-платформенная сборка с cx_Freeze под Linux

Пример

# setup.py (тот же, что в content)
# на Linux:
python setup.py build_exe
# создаётся папка build/exe.linux-x86_64-3.10/ с исполняемым файлом

Пример 7: Обработка ошибок при сборке - импорт модуля, не найденного PyInstaller

Пример

# app.py
import pandas as pd  # может не подхватиться

Решение: явно указать hiddenimport:

Пример

pyinstaller --hidden-import pandas --onefile app.py

Результат: EXE работает без ошибок.

Конвертация .py в .exe - comments

En
Python auto py to exe (python)