Превращение кода на Python в EXE: методы и советы

Раздел: Упаковка -> Упаковка приложений

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

Преобразование программы на Python в самостоятельный исполняемый файл (exe) позволяет запускать приложение на компьютерах без установленного интерпретатора. Это удобно для распространения среди пользователей. Существует несколько инструментов для упаковки, каждый со своими особенностями.

Как упаковать Python скрипт в один exe файл с помощью PyInstaller?

PyInstaller - самое распространенное решение. Оно анализирует зависимости и создает один или несколько файлов.

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

pip install pyinstaller

Python program to exe (преобразование python в exe)

Базовая команда для создания одного exe:

pyinstaller --onefile myscript.py

Python exe windows (создание exe из python на windows)

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

Типичные проблемы и их решения:

  • Пропущенные модули: PyInstaller не всегда находит все импорты. Можно явно указать:
  • --hidden-import=имя_модуля

    Exe file python (создание exe файла в python)

  • Большой размер exe: возможно использование UPX сжатия (флаг --upx-dir=путь) или удаление ненужных библиотек через --exclude-module.
  • Антивирусные блокировки: подписание файла цифровой подписью или упаковка без --onefile уменьшает подозрения.

Как создать exe с папкой зависимостей через cx_Freeze?

cx_Freeze подходит для проектов с большим количеством внешних данных. Он генерирует папку build со всеми необходимыми файлами.

Пример setup.py:

from cx_Freeze import setup, Executable
setup(
    name="MyApp",
    version="1.0",
    description="Пример приложения",
    executables=[Executable("myscript.py", base=None)]
)

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

python setup.py build

Пояснение: параметр base может быть "Win32GUI" для GUI-приложений (без консоли).

Проблемы:

  • Некоторые модули могут не включиться автоматически. Список includes можно добавить в options:
  • options = {"build_exe": {"includes": ["модуль"]}}
  • Ошибки с путями: следует проверить, что все ресурсы скопированы. Используется include_files для добавления файлов.

Как скомпилировать Python в exe с улучшением производительности через Nuitka?

Nuitka транслирует Python код в C++ и компилирует в нативный исполняемый файл. Производительность повышается, но требуется компилятор C.

Установка:

pip install nuitka

Пример команды с оптимизациями:

nuitka --onefile --standalone --enable-plugin=tk-inter --lto=yes myscript.py

Параметры: --standalone создает папку, --onefile - один exe, --enable-plugin добавляет поддержку Tkinter, --lto включает link-time optimization.

Сложности:

  • Требуется компилятор C (MSVC на Windows или MinGW). Можно установить Visual Studio Build Tools или MinGW-w64.
  • Компиляция занимает много времени, особенно при первом запуске. Рекомендуется использовать кэш (--cache-dir).
  • Некоторые динамические импорты могут не сработать. Их можно указать через --include-package.

Как использовать классический py2exe для Windows?

py2exe - старый инструмент, который до сих пор поддерживает Python 3, но менее гибкий. Подходит для простых консольных утилит.

Пример setup.py:

from distutils.core import setup
import py2exe
setup(
    console=["myscript.py"],
    options={
        "py2exe": {
            "bundle_files": 1,
            "compressed": True
        }
    }
)

Запуск:

python setup.py py2exe

Результат в папке dist. Параметр bundle_files=1 создает один exe.

Недостатки:

  • Плохая поддержка современных библиотек (например, tkinter, matplotlib).
  • Отсутствие активной разработки. Рекомендуется перейти на PyInstaller или Nuitka.

Как сделать exe с графическим интерфейсом через auto-py-to-exe?

auto-py-to-exe - графическая обертка над PyInstaller, удобная для начинающих.

Установка:

pip install auto-py-to-exe

Запуск:

auto-py-to-exe

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

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

  • Не все параметры PyInstaller доступны в графическом интерфейсе.
  • При сложных проектах с нестандартными зависимостями лучше использовать командную строку.

Расширенные примеры для PyInstaller

Пример с иконкой, скрытием консоли и дополнительными данными.

Пример
pyinstaller --onefile --noconsole --icon=myicon.ico --add-data "images;images" myscript.py

Результат: в папке dist появится myscript.exe с иконкой, без консоли, с папкой images внутри архива.

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

Пример
pyinstaller --onefile --name MyApp myscript.py
# После генерации spec-файла можно его отредактировать:
# Добавить hiddenimports, datas, hookspath и т.д.
# Затем запустить сборку из spec:
pyinstaller MyApp.spec

Пример spec-файла с добавлением скрытых импортов:

Пример
# MyApp.spec
a = Analysis(['myscript.py'],
             pathex=[],
             binaries=[],
             datas=[('images', 'images')],
             hiddenimports=['pandas', 'numpy'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=None,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=None)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='MyApp',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          argv_emulation=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None,
          icon='myicon.ico')

После редактирования выполнить

Пример
pyinstaller MyApp.spec
.

Результат: файл с полным контролем зависимостей.

Пример работы с виртуальным окружением для уменьшения размера:

Пример
# Создание чистого окружения
python -m venv venv
venv\Scripts\activate
pip install pyinstaller # и нужные библиотеки
pyinstaller --onefile myscript.py

Размер exe уменьшается, так как включаются только установленные пакеты.

Пример вывода консоли при успешной сборке:

108 INFO: PyInstaller: 6.6.0
108 INFO: Python: 3.11.5
...
2248 INFO: Building EXE from EXE-00.toc completed successfully.
2248 INFO: checking EXE
2248 INFO: Building EXE from EXE-00.toc completed successfully.

Расширенный пример для cx_Freeze

Настройка с включением файлов данных и зависимостей.

Пример
from cx_Freeze import setup, Executable
import sys

options = {
    'build_exe': {
        'includes': ['json', 'os', 'sys'],
        'excludes': ['tkinter'],
        'include_files': [('config.json', 'config.json')],
        'optimize': 2
    }
}
executables = [
    Executable('myscript.py', base='Win32GUI' if sys.platform == 'win32' else None)
]
setup(name='MyApp', version='1.0', description='', options=options, executables=executables)

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

Пример
python setup.py build

Результат: в папке build/exe.win-amd64-3.11/ появится папка с исполняемым файлом и конфигом.

Пример вывода:

running build
running build_exe
creating directory build\exe.win-amd64-3.11
copying C:\Python311\python.exe -> build\exe.win-amd64-3.11
...
Writing script: build\exe.win-amd64-3.11\myscript.exe

Расширенный пример для Nuitka

Компиляция с использованием кэша и указанием явных плагинов.

Пример
nuitka --onefile --standalone --enable-plugin=tk-inter --enable-plugin=multiprocessing --lto=yes --output-dir=build_nuitka --cache-dir=nuitka_cache myscript.py

Результат: в папке build_nuitka появится myscript.exe (или myscript.dist, если без --onefile).

Пример вывода (сокращенный):

Nuitka: 2.1.5
Python: 3.11.5
Starting compilation of myscript.py
...
Completed compilation in 45.3 seconds.
Generated file: build_nuitka/myscript.exe

Для проверки: запуск exe и сравнение с исходным скриптом.

Создание exe файла в Python - comments

En
Exe file python (python)