PyInstaller и Nuitka генерируют невероятно большие файлы. Как можно уменьшить размер?

Я использую дистрибутив Python 3.6 Anaconda для Windows и хочу преобразовать простой скрипт Python в автономный исполняемый файл. Проблема в том, что сгенерированный файл очень большой (~ 900 МБ) при использовании только нескольких внешних библиотек.

В частности, я использую PyQt5 и pyqtgraph, а также некоторые интегрированные библиотеки Python, такие как sys, time, os и math. До сих пор я использовал PyInstaller и Nuitka, но мне не удалось резко уменьшить размер исполняемого файла.

Я заметил существование некоторых файлов mkl, которые занимают примерно 600 МБ места. После удаления этих файлов я все еще мог запускать свою программу, казалось бы, без сучка и задоринки. Я также заметил, что есть два файла с именем libopenblas, которые кажутся жизненно важными для работы программы и которые в сумме составляют 100 МБ.

Я изучил этот вопрос и нашел похожие вопросы на Stackoverflow и других сайтах. Люди утверждают, что с помощью PyInstaller они смогли создать исполняемые файлы размером менее 40 МБ. Говорят, что для достижения этого уменьшения размера следует исключить все библиотеки беспорядка. Однако я не понимаю, что квалифицируется как «беспорядок». Например, я попытался исключить numpy, и программа не запустилась, несмотря на то, что я не использовал ее напрямую в своей программе. По-видимому, используемые библиотеки имеют некоторые зависимости, без которых программа не может работать.

Наконец, я нашел этот форум, где предлагается использовать виртуальную среду вместо Анаконды. Я попытался настроить его с помощью venv, но у меня возникли проблемы с его реализацией, так как моя установка Anaconda мешает ему и не позволяет мне заново установить все необходимые библиотеки.

Независимо от того, что я делаю, я всегда получаю не менее 200 МБ данных. Как я могу получить функциональный исполняемый файл размером менее 40 МБ? Если простая программа, подобная этой, создает такой большой файл, представьте, что я получу, если решу интегрировать другие библиотеки, такие как tensorflow или scipy. Это нежизнеспособное решение, и до сих пор я не придумал, как его обойти. Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: я попытался установить Python с его официального сайта и удалил Anaconda из Path. В итоге я получил немного меньший файл, который не запустился.


person J. Fenigan    schedule 05.02.2020    source источник


Ответы (1)


Я понимаю, что это старо, но я наткнулся на него сегодня и решил ту же проблему.

Программа Pyinstaller hello world скомпилируется примерно до 12 МБ. Однако, как только вы начинаете делать что-то существенное, требуется numpy, который является большим.

У меня есть одна программа, которая требует

paramiko
scp

он компилируется в 12 Мб.

У меня есть другой, который требует

numpy
tqdm
nomkl
matplotlib

Он компилируется в ~200 Мб (архивируется в ~75 Мб). При использовании пакета nomkl установщик автоматически отключает библиотеки mkl. Вам нужно удалить numpy, а затем установить nomkl и переустановить numpy. Без номкл вышеуказанная программа весила около 1 Гб.

Я рекомендую использовать среды conda, а не виртуальные среды, если у вас установлена ​​anaconda.

person Trogdor    schedule 22.06.2020