Подтвердить что ты не робот

Уменьшение размера исполнятеля pyinstaller

У меня есть простой pandas pyinstaller exe, который превышает 40 МБ.

Мой пример exe:

import collections
import csv
import selenium
import pandas

print('hi')

40MB + для этого кажется немного переборщиком.

Как я могу уменьшить это как можно больше?

Один метод:

pyinstaller --onefile --exclude matplotlib --exclude scipy --exclude pandas --exclude numpy.py

Это, однако, нецелесообразно, учитывая, насколько большой будет список исключений.

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

Файл спецификации:

a = Analysis(['123.py'],
             pathex=['C:\\Users\\AA\\ZZ'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='123',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

Это также стоит упомянуть. По умолчанию Pyinstaller не обнаруживает pandas.

Добавить

hiddenimports = ['pandas._libs.tslibs.timedeltas']

To: C:\Users\<NAME>\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyInstaller\hooks

Возможное решение при использовании нескольких исполняемых файлов может заключаться в том, чтобы связать каждый исполняемый файл с отдельной папкой или исполняемым файлом со всеми импортируемыми.

4b9b3361

Ответ 1

попробуйте настроить вашу среду с помощью virtualenv и установить туда только необходимые библиотеки

некоторые подробности о работе с виртуальной средой находятся здесь: https://virtualenv.pypa.io/en/stable/

Ответ 2

Я чувствую, что оба этих ответа превосходны.

Для меня это простой пример использования pandas, что exe огромен.

Хотя удаление некоторых каталогов было полезным, как и UPXING, это также помогло.

Я немного уменьшил его, и по умолчанию он не делал этого.

Говоря об этом, здесь обсуждается последнее и наиболее импортное решение: Импорт модулей Python из выбранного местоположения. Таким образом, была функция, которая сделала все это, но на данный момент существует некоторая ручная обработка, потому что: разбиты пакеты с несколькими пакетами.

Теперь к простому решению для большого количества exe

Если у вас много исполняемых файлов, я настоятельно рекомендую этот подход:

pyinstaller -F abc.py --onedir (Have all imports of both scripts)
pyinstaller -F abd.py --onedir (Have all imports of both scripts)

Теперь поместите файл abd.exe в один каталог папки abc.py, а также любые другие внешние скрипты. Убедитесь, что они по-разному названы или запускается только один script.

Это работает очень хорошо, потому что все зависимости находятся в одной папке. Так оно и должно быть. Таким образом, в этом примере говорится, что у вас есть папка размером 40 МБ. Для каждого дополнительного exe после этого он будет равен + 5mb (или насколько большой exe), а не 40mb каждый.

Ответ 3

В исполняемый файл включен интерпретатор python и все импортированные модули.

Вы можете попробовать добавить модули, которые хотите исключить, в список excludes в Analysis в вашем файле spec.

Вы также можете попробовать сжать исполняемый файл, используя UPX. См. Заметка об использовании UPX

Ответ 4

Я использую среду Anaconda, поэтому решение virtualenv не подходит. Мой способ состоял в том, чтобы исключить ненужные модули в моем файле спецификации, например:

в анализе (...)

excludes=['pandas', 'numpy'],

(это модули, которые необычайно увеличивают размер файлов)

Для каждой сборки я использую этот скорректированный spec файл для создания exe файла.

pyinstaller "mySpec.spec" --distpath="<path>"