Как уменьшить размер exe? (Python, Kivy)

Рейтинг: 0Ответов: 2Опубликовано: 08.07.2023

Сколько бы я не искал на StackOverflow, я не нашел внятного ответа про сжатие exe файла. Интересует само наполнение exe-шника, что же в нем такого на 71 мб? Я собрал с помощью PyInstaller простейшее оконное приложение на kivy. После первичной сборки, до доработки spec файла, я получил 70 чистых мегабайт. Стоит учитывать то, что поставщик окон windows еще не был подключен - я не собирал exe вторично, с помощью spec. После второй сборки, размер стал 71 мб. Я правда хотел бы узнать причины такого огромного размера и как его уменьшить. Заранее спасибо.

P.S. Я смирюсь с размером 30-40 мб, но 70 - это перебор.

P.P.S. Я использовал сжатие UPX и параметр strip и добился размера 56 мб (изначально 76). Но я не думаю, что это минимально возможный размер. Прошу, предлагайте еще свои варианты - 40 мб меня устроит.

Я приложу ниже spec файл:

# -*- mode: python ; coding: utf-8 -*-

from kivy_deps import sdl2, glew

block_cipher = None


a = Analysis(
    ['src\\main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    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,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    name='apps',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

Ответы

▲ 1Принят

Существуют несколько способов уменьшить размер исполняемого файла при использовании PyInstaller с Kivy.

  1. Удаление ненужных модулей и кода: В spec файле PyInstaller можно указать, какие модули и файлы следует исключить из сборки. Если вы не используете некоторые модули или зависимости, вы можете исключить их из сборки, что приведет к сокращению размера итогового исполняемого файла.

  2. Сжатие исполняемого файла: PyInstaller имеет опцию --upx, которая позволяет использовать UPX (Универсальный пакет сжатия исполняемых файлов) для сжатия исполняемого файла. Вы можете добавить этот параметр в командную строку PyInstaller, чтобы уменьшить размер файла. Например:

    pyinstaller --upx-dir [Path from UPX] your_script.spec
    
  3. Использование «onefile» вместо «onedir»: При сборке PyInstaller с Kivy, вы можете выбрать опцию --onefile вместо --onedir в командной строке PyInstaller. Это объединит все файлы в один исполняемый файл, что часто приводит к уменьшению размера файла. Например:

    pyinstaller --onefile your_script.spec
    
  4. Использование внешних библиотек: Вместо включения всех зависимостей в сгенерированный файл, можно использовать внешние библиотеки (например, DLL) и загружать их во время выполнения. Это может сократить размер исполняемого файла.

  5. Удаление отладочной информации: При сборке PyInstaller, вы можете указать опцию --strip, чтобы удалить отладочную информацию из исполняемого файла, что может уменьшить его размер.

Обратите внимание, что некоторые из этих методов могут повлиять на работоспособность и функциональность вашего приложения.

▲ 0

Вы используете виртуальное окружение? Если да, то попробуйте посмотреть модули, которые установлены в ваше виртуальное окружение и удалите все лишние модули.