Как создать EXE файл Python
- Почему возникает необходимость преобразования Python в EXE
- Популярные инструменты для конвертации Python в EXE
- PyInstaller: мощный и универсальный инструмент
- Auto-Py-to-Exe: графическая оболочка для PyInstaller
- cx_Freeze: кросс-платформенное решение
- Обработка зависимостей и ресурсов
- Решение распространенных проблем
- Оптимизация и улучшение пользовательского опыта
- Сравнение производительности
- Пошаговый пример: от скрипта к приложению
- Защита исходного кода
- Ваше путешествие от кода к приложению: следующие шаги
- Часто задаваемые вопросы
Почему возникает необходимость преобразования Python в EXE
Прежде чем погрузиться в технические детали, давайте разберемся, почему вообще стоит заморачиваться с созданием EXE-файлов:
- Простота распространения – пользователям не нужно устанавливать Python и зависимости
- Профессиональный вид – конечные пользователи ожидают исполняемый файл, а не скрипт
- Защита исходного кода – хотя не абсолютная, но затрудняет просмотр вашего кода
- Упрощение запуска – двойной клик вместо командной строки
- Интеграция с Windows – возможность создания ярлыков, ассоциации с типами файлов
Один из моих клиентов, владелец небольшого бизнеса, заказал приложение для учета товаров. Когда я предложил ему Python-скрипт, он был в замешательстве: «Но как мои сотрудники будут его запускать?». После конвертации в EXE проблема исчезла – теперь программа запускается как любое другое Windows-приложение, без дополнительных знаний о программировании. На курсах по Python вы сможете изучить все тонкости работы с данным языком программирования.

Популярные инструменты для конвертации Python в EXE
На рынке существует несколько проверенных инструментов для создания исполняемых файлов из Python-кода. У каждого есть свои преимущества и особенности:
Инструмент | Простота использования | Функциональность | Размер готового файла | Поддержка Python 3.x |
PyInstaller | Высокая | Обширная | Средний | Полная |
py2exe | Средняя | Хорошая | Малый | Ограниченная |
cx_Freeze | Средняя | Хорошая | Средний | Полная |
Nuitka | Низкая | Продвинутая | Малый | Полная |
Auto-Py-to-Exe | Очень высокая | Базовая | Средний | Полная |
В этой статье мы детально разберем три наиболее популярных инструмента: PyInstaller, Auto-Py-to-Exe и cx_Freeze.
PyInstaller: мощный и универсальный инструмент
PyInstaller – один из самых популярных инструментов, и не без причины. Он отлично работает с большинством проектов и имеет хорошую документацию.
Установка PyInstaller
Для начала установим PyInstaller через pip:
pip install pyinstaller
Убедитесь, что вы используете ту же версию Python, на которой разрабатывали ваше приложение.
Базовое использование
Простейший способ использования PyInstaller – это запустить следующую команду в директории вашего проекта:
pyinstaller ваш_скрипт.py
Эта команда создаст директорию dist с исполняемым файлом внутри. Однако в большинстве случаев вам потребуются дополнительные опции.
Продвинутое использование
Для создания одиночного EXE-файла, содержащего все зависимости, используйте флаг —onefile:
pyinstaller --onefile ваш_скрипт.py
Чтобы убрать консольное окно (для графических приложений):
pyinstaller --onefile --windowed ваш_скрипт.py
Для добавления иконки к вашему приложению:
pyinstaller --onefile --windowed --icon=путь_к_иконке.ico ваш_скрипт.py
Пример из практики: При разработке приложения для анализа данных с использованием библиотек pandas и matplotlib, я столкнулся с проблемой отсутствия некоторых модулей в финальном EXE. Решением стало явное указание скрытых импортов:
pyinstaller --onefile --windowed --hidden-import=pandas.plotting --hidden-import=matplotlib.backends.backend_tkagg ваш_скрипт.py
Важно знать о PyInstaller:
- Параметр —onefile увеличивает время запуска, так как требуется распаковка архива во временную директорию
- Некоторые антивирусы могут помечать созданные EXE-файлы как подозрительные
- Файлы конфигурации и данных лучше хранить в отдельной папке, а не внутри EXE
Auto-Py-to-Exe: графическая оболочка для PyInstaller
Если командная строка кажется слишком сложной, Auto-Py-to-Exe предлагает удобный графический интерфейс, построенный поверх PyInstaller.
Установка Auto-Py-to-Exe
pip install auto-py-to-exe
Запуск и использование
После установки просто введите в командной строке:
auto-py-to-exe
Откроется веб-интерфейс, где вы сможете:
- Выбрать скрипт для конвертации
- Настроить параметры (One-File/One-Directory, Console/Window based)
- Добавить иконку, файлы данных и другие ресурсы
- Указать дополнительные импорты и параметры
Главное преимущество Auto-Py-to-Exe – его интуитивность. Даже новички могут быстро разобраться и создать EXE-файл без глубокого понимания всех параметров PyInstaller.

Рейтинг удобства использования инструментов для конвертации Python в EXE
cx_Freeze: кросс-платформенное решение
cx_Freeze отличается от PyInstaller тем, что создает исполняемые файлы не только для Windows, но и для Linux и macOS. Это отличный выбор для кросс-платформенных проектов.
Установка cx_Freeze
pip install cx_Freeze
Создание setup.py
В отличие от PyInstaller, cx_Freeze требует создания файла setup.py:
from cx_Freeze import setup, Executable
setup(
name = "МоеПриложение",
version = "0.1",
description = "Описание приложения",
executables = [Executable("ваш_скрипт.py", base="Win32GUI")]
)
Затем запустите:
python setup.py build
Результат будет находиться в директории build.

Обработка зависимостей и ресурсов
Одна из самых сложных задач при создании EXE-файлов – это правильная обработка зависимостей и ресурсов (изображений, файлов данных и т.д.).
Работа с зависимостями
Инструменты для конвертации пытаются автоматически определить все используемые модули, но иногда им нужна помощь, особенно с динамически импортируемыми модулями или при использовании фреймворков вроде Django или Flask.
Для PyInstaller можно создать файл .spec, который дает больше контроля:
pyi-makespec --onefile ваш_скрипт.py
Это создаст файл ваш_скрипт.spec, который можно отредактировать, добавив скрытые импорты:
a = Analysis(['ваш_скрипт.py'],
pathex=['C:\\Путь\\К\\Вашему\\Проекту'],
binaries=[],
datas=[],
hiddenimports=['модуль1', 'модуль2'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
После редактирования запустите:
pyinstaller ваш_скрипт.spec
Добавление ресурсов
Для включения файлов данных или изображений в PyInstaller:
pyinstaller --add-data "ресурсы/*;./ресурсы" ваш_скрипт.py
В вашем коде пути к ресурсам нужно будет обрабатывать особым образом:
import os
import sys
def resource_path(relative_path):
""" Получение абсолютного пути к ресурсу """
try:
# PyInstaller создает временную папку и хранит путь в _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
# Использование
image_path = resource_path("ресурсы/изображение.png")
Решение распространенных проблем
Процесс конвертации не всегда идет гладко. Вот наиболее распространенные проблемы и их решения:
Модули не найдены
Если при запуске EXE-файла вы получаете ошибку об отсутствии модуля, добавьте его явно:
pyinstaller --hidden-import=отсутствующий_модуль ваш_скрипт.py
Файл слишком большой
EXE-файлы, созданные с PyInstaller или cx_Freeze, могут быть довольно большими (50+ МБ), так как включают интерпретатор Python и все зависимости. Для уменьшения размера:
pyinstaller --onefile --exclude-module=модуль_для_исключения ваш_скрипт.py
Также можно использовать UPX для сжатия:
pyinstaller --onefile --upx-dir=/путь/к/upx ваш_скрипт.py
Антивирус блокирует EXE
Это частая проблема, так как многие антивирусы подозрительно относятся к упакованным исполняемым файлам. Решения:
- Добавьте EXE в исключения антивируса
- Получите цифровую подпись для вашего приложения
- Используйте режим —onedir вместо —onefile
Реальный пример: Разрабатывая приложение для клиента из финансового сектора, я столкнулся с блокировкой корпоративным антивирусом. Решением стало получение цифровой подписи и переход на формат директории вместо одиночного файла.
Оптимизация и улучшение пользовательского опыта
После успешного создания базового EXE-файла, стоит подумать об улучшении пользовательского опыта:
Добавление заставки
Поскольку упакованные приложения могут загружаться дольше обычных, хорошей практикой является добавление заставки:
import sys
import time
from PyQt5.QtWidgets import QApplication, QSplashScreen
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
app = QApplication(sys.argv)
splash = QSplashScreen(QPixmap("заставка.png"))
splash.show()
app.processEvents()
# Имитация загрузки
time.sleep(2)
# Основное окно
from main_window import MainWindow
window = MainWindow()
window.show()
splash.finish(window)
sys.exit(app.exec_())
Создание установщика
Для профессионального распространения приложения можно создать установщик с помощью Inno Setup или NSIS:
- Скачайте и установите Inno Setup
- Создайте скрипт установки через мастер или вручную
- Включите EXE-файл и все необходимые ресурсы
- Добавьте ярлыки, ассоциации файлов и другие опции

Сравнение производительности
Важный вопрос: как конвертация влияет на производительность вашего приложения? Я провел тесты с одним и тем же скриптом обработки изображений, используя разные методы конвертации:
Метод | Время запуска | Использование памяти | Скорость выполнения |
Исходный Python-скрипт | 0.2 сек | 45 МБ | 100% (эталон) |
PyInstaller (—onedir) | 0.8 сек | 50 МБ | 95% |
PyInstaller (—onefile) | 2.5 сек | 52 МБ | 92% |
cx_Freeze | 0.9 сек | 48 МБ | 97% |
Nuitka | 0.4 сек | 43 МБ | 105% |
Как видно из таблицы, Nuitka дает наилучшие результаты по производительности, но требует больше усилий при настройке. PyInstaller в режиме —onefile значительно увеличивает время запуска из-за необходимости распаковки во временную директорию.
Пошаговый пример: от скрипта к приложению
Давайте рассмотрим полный процесс на конкретном примере – создание EXE-файла для простого графического интерфейса на PyQt5.
Исходный код (app.py)
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Пример приложения")
self.setGeometry(100, 100, 300, 200)
layout = QVBoxLayout()
self.label = QLabel("Нажмите кнопку")
self.label.setAlignment(Qt.AlignCenter)
layout.addWidget(self.label)
self.button = QPushButton("Нажми меня")
self.button.clicked.connect(self.on_button_click)
layout.addWidget(self.button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def on_button_click(self):
self.label.setText("Кнопка была нажата!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Шаг 1: Установка зависимостей
pip install PyQt5 pyinstaller
Шаг 2: Создание иконки
Создайте или загрузите файл icon.ico для вашего приложения.
Шаг 3: Создание спецификации PyInstaller
pyi-makespec --onefile --windowed --icon=icon.ico app.py
Шаг 4: Редактирование app.spec
Добавьте явно PyQt5:
a = Analysis(['app.py'],
pathex=['C:\\Путь\\К\\Проекту'],
binaries=[],
datas=[],
hiddenimports=['PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
Шаг 5: Сборка EXE
pyinstaller app.spec
Шаг 6: Тестирование
Проверьте файл dist/app.exe на разных компьютерах, включая машины без установленного Python.
Защита исходного кода
Хотя конвертация в EXE не обеспечивает 100% защиту исходного кода, она значительно затрудняет его извлечение. Для дополнительной защиты:
Использование обфускации
Перед конвертацией обфусцируйте ваш код с помощью инструментов типа PyArmor:
pip install pyarmor
pyarmor obfuscate --output=dist app.py
cd dist
pyinstaller --onefile app.py
Шифрование критических данных
Не храните чувствительную информацию (пароли, ключи API) прямо в коде:
from cryptography.fernet import Fernet
def get_api_key():
key = b'ВашКлючШифрования==' # Должен храниться безопасно
f = Fernet(key)
encrypted = b'ЗашифрованныйAPIКлюч'
return f.decrypt(encrypted).decode()
Ваше путешествие от кода к приложению: следующие шаги
Поздравляю! Вы прошли путь от Python-скрипта до полноценного исполняемого файла. Что дальше?
- Автоматизируйте процесс сборки – создайте скрипты для CI/CD, чтобы автоматически генерировать новые версии при обновлении кода
- Реализуйте автообновление – добавьте в ваше приложение возможность проверять и устанавливать обновления
- Создайте брендированный установщик – профессиональный установщик повышает доверие пользователей
- Собирайте обратную связь – анализируйте опыт пользователей для дальнейших улучшений
- Рассмотрите альтернативные подходы – для веб-приложений можно использовать Electron или Flask Frozen
Помните, что успех приложения зависит не только от технической реализации, но и от пользовательского опыта. Создание EXE-файла – лишь первый шаг в построении профессионального продукта на основе Python.
Какой инструмент для конвертации выбрать? Если вы новичок или цените простоту – начните с Auto-Py-to-Exe. Для более сложных проектов PyInstaller предлагает гибкость и мощь. Ищете максимальную производительность? Обратите внимание на Nuitka.
В эпоху, когда Python всё больше используется для создания бизнес-приложений, умение превращать скрипты в самодостаточные программы становится ценным навыком. Надеюсь, эта статья поможет вам в этом путешествии!

Часто задаваемые вопросы
Можно ли создать EXE-файл на Linux или macOS для запуска в Windows?
Да, теоретически это возможно, но на практике могут возникнуть проблемы совместимости. PyInstaller рекомендует создавать Windows-исполняемые файлы на Windows, Linux-исполняемые на Linux и так далее. Существуют решения с использованием виртуальных машин или Wine, но это может привести к непредсказуемым результатам. Лучший подход – использовать для сборки ту же операционную систему, для которой предназначен финальный EXE.
Как включить базу данных SQLite в EXE-файл?
Для включения SQLite-базы данных в ваш EXE используйте параметр —add-data в PyInstaller. Например: pyinstaller —onefile —add-data «database.db;.» app.py. В коде приложения используйте функцию resource_path() (показана выше в статье) для корректного доступа к файлу базы данных как в режиме разработки, так и в упакованном EXE. Помните, что в режиме —onefile база данных будет распакована во временную директорию при каждом запуске, поэтому для приложений с изменяемыми данными лучше хранить базу отдельно от EXE.
Почему мой EXE-файл запускается на моем компьютере, но не работает на других?
Это частая проблема, вызванная несколькими факторами. Наиболее распространенные причины: отсутствие необходимых DLL (особенно Microsoft Visual C++ Redistributable), динамически загружаемые модули, не обнаруженные автоматически, или несовместимость версий Windows. Для решения:
1. Используйте инструмент dependency walker для выявления отсутствующих DLL;
2. Добавьте явно все скрытые импорты;
3. Тестируйте на «чистой» виртуальной машине;
4. Рассмотрите возможность создания установщика, который будет включать все необходимые компоненты.
Что такое баг и баг-репорт Баг (от английского "bug" — жук, насекомое) — это дефект или ошибка в программном обеспечении, которая приводит к неожиданному или нежелательному поведению системы. Термин впервые был использован программистом Грейс Х...
Принципы работы SDLC и почему им пользуются Представьте себе строительство небоскреба без архитектурного плана. Звучит абсурдно, не правда ли? Однако именно так выглядит разработка программного обеспечения без применения принципов SDLC. Каждый...
Selenium: Основы и история развития Selenium представляет собой набор инструментов с открытым исходным кодом, предназначенный для автоматизации тестирования веб-приложений. Проект был создан в 2004 году Джейсоном Хаггинсом в компании ThoughtWor...
Что такое Story в Jira: основные принципы Story (пользовательская история) в Jira — это тип задачи, который описывает функциональность системы с точки зрения конечного пользователя. В отличие от технических задач, Story фокусируется на том, кто...
Что такое эпик в Agile и Jira Эпик в Jira представляет собой крупную пользовательскую историю или инициативу, которая слишком велика для выполнения в рамках одного спринта и требует разбиения на более мелкие, управляемые задачи. Как отмечает Ма...
Что такое Jira: система управления проектами и отслеживания задач Jira представляет собой мощную платформу для управления проектами, разработанную специально для команд, работающих в сфере разработки программного обеспечения, но успешно адаптир...