Инструменты создания EXE из Python скриптов
Преобразование Python скриптов в исполняемые файлы
Упаковка Python программы в EXE файл позволяет запускать её на компьютерах без установленного интерпретатора. Рассмотрим наиболее эффективный инструмент и альтернативы.
Как конвертировать .py в .exe с помощью auto-py-to-exe?
auto-py-to-exe предоставляет графический интерфейс для PyInstaller. Его главное преимущество - наглядность и простота настройки.
Установка: выполняется через pip:
pip install auto-py-to-exePython 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 работает без ошибок.