Исполняемые программы на Python: от скрипта к готовому приложению

Раздел: Инструменты -> Создание исполняемых файлов

Инструменты и методы создания исполняемых файлов

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

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

Наиболее эффективным инструментом считается PyInstaller. Он анализирует импорты, упаковывает интерпретатор и библиотеки в один или несколько файлов. Установка и базовая сборка выглядят так:

pip install pyinstaller
pyinstaller --onefile --windowed --icon=app.ico myscript.py

Python исполняемая программа (исполняемая программа python)

Параметр --onefile создает единственный исполняемый файл, --windowed убирает консоль (для GUI приложений), --icon задает иконку. Результат появляется в папке dist.

Возможные проблемы:

  • Ложные срабатывания антивирусов - упакованные скрипты часто распознаются как угрозы. Решение: добавить подпись, использовать UPX сжатие (--upx-dir) или исключить неиспользуемые модули (--exclude-module).
  • Ошибка ModuleNotFoundError для динамически импортируемых библиотек - требуется явно указать скрытые импорты: --hidden-import=numpy.
  • Большой размер (50+ МБ) - уменьшается с помощью --exclude-module и опции --onefile (потому что распаковка не требуется).

Как собрать исполняемый файл с сохранением папок зависимостей и данных?

Инструмент cx_Freeze создает папку со всеми файлами, а не одиночный exe. Пример конфигурации через setup.py:

from cx_Freeze import setup, Executable
setup(
    name='MyApp',
    version='1.0',
    executables=[Executable('script.py', base='Win32GUI')]
)

Затем выполняется сборка: python setup.py build. Полученная папка содержит все необходимые DLL и библиотеки. Это удобно для приложений, которым требуются ресурсы (изображения, конфиги).

Типичная ошибка: отсутствие некоторых модулей в сборке. Решение: добавить их в options через build_exe.includes или include_files.

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

Nuitka транслирует Python в C/C++ и компилирует нативный код. Команда:

nuitka --standalone --onefile --enable-plugin=tk-inter script.py

Параметр --standalone упаковывает все зависимости, --onefile создает один exe, --enable-plugin=tk-inter подключает поддержку Tkinter. Результат - компактный исполняемый файл.

Сложности: длительное время компиляции (особенно для больших проектов) и возможные ошибки при наличии C-расширений. Рекомендуется тестировать на целевой ОС.

Как создать exe с минимальными усилиями без установки дополнительных инструментов?

py2exe (устарел, не поддерживает Python 3.10+) требует написания setup.py:

from distutils.core import setup
import py2exe
setup(console=['script.py'])

Запуск: python setup.py py2exe. Современные проекты использовать не рекомендуется из-за отсутствия обновлений.

Как упаковать скрипт через графический интерфейс, не прибегая к командной строке?

auto-py-to-exe служит графической оболочкой над PyInstaller. Установка: pip install auto-py-to-exe. Запуск: auto-py-to-exe. В окне выбирается скрипт, настройки (onefile, windowed, иконка) и нажимается кнопка “Convert”. Под капотом вызывается PyInstaller с соответствующими аргументами.

Ограничение: меньше контроля над деталями сборки (например, сложные spec-файлы не поддерживаются).

Дополнительные примеры и углубленные настройки

Пример 1: PyInstaller с кастомным .spec файлом для сложных проектов

Создается файл myscript.spec с полным контролем:

Пример
# -*- mode: python -*-

block_cipher = None

a = Analysis(['myscript.py'],
             pathex=['C:\\project'],
             binaries=[],
             datas=[('config.json', 'config'), ('images/*.png', 'images')],
             hiddenimports=['datetime', 'json'],
             hookspath=[],
             runtime_hooks=[],
             excludes=['tkinter'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
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,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

Затем сборка: pyinstaller myscript.spec. В результате получается один exe с включенными файлами конфигурации и изображениями, без модуля tkinter. Размер 28 МБ.

C:\project\dist\MyApp.exe  (28 452 352 bytes)

Пример 2: Nuitka с оптимизацией и поддержкой графики

Команда для приложения с Tkinter и Matplotlib:

Пример
nuitka --standalone --onefile --enable-plugin=tk-inter --enable-plugin=matplotlib --windows-disable-console --output-dir=dist_nuitka plotter.py

Лог сборки показывает этапы трансляции и компиляции. После завершения:

Nuitka:INFO: Successfully created 'C:\project\dist_nuitka\plotter.exe'. Size: 15.8 MB.

Файл не требует внешних библиотек и запускается без установленного Python.

Пример 3: cx_Freeze с включением ресурсов и настройкой зависимостей

Подготовка setup.py для приложения, использующего изображения и SQLite:

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

options = {
    'build_exe': {
        'includes': ['sqlite3', 'PIL'],
        'include_files': [('data/icons', 'icons'), ('config.yaml', 'config.yaml')],
        'excludes': ['matplotlib']
    }
}

setup(
    name='ImageEditor',
    version='2.0',
    description='Простой редактор изображений',
    executables=[Executable('image_editor.py', base='Win32GUI')],
    options=options
)

После python setup.py build в папке build появляется каталог с программой, папкой icons и файлом config.yaml. Размер 35 МБ.

build\exe.win-amd64-3.9\ImageEditor.exe  (35 020 800 bytes)

Пример 4: auto-py-to-exe через командную строку (скрытый вызов)

Несмотря на графический интерфейс, инструмент позволяет передать параметры в PyInstaller напрямую:

Пример
auto-py-to-exe --file script.py --onefile --console --icon app.ico --output-dir output

Эквивалентно ручному вызову PyInstaller с теми же аргументами. Результат:

Output saved to: output/script.exe

Исполняемая программа Python - comments

En
Python исполняемая программа (python)