Как удалить pyinstaller windows

Обновлено: 05.07.2024

Существует бесчисленное множество руководств по настройке виртуальных сред, управления зависимостями и опубликованием в PyPI, что полезно при создании библиотек Python. Для разработчиков, создающих приложения Python, информации гораздо меньше. Этот урок для те, кто хочет распространять приложения среди пользователей, которые могут быть не только разработчиками Python.

В этом уроке вы узнаете:

  • Как PyInstaller может упростить распространение приложений
  • Как использовать PyInstaller в ваших собственных проектах
  • Как отлаживать ошибки PyInstaller
  • Что PyInstaller не может

PyInstaller дает вам возможность создать папку или исполняемый файл, который пользователи могут сразу запустить без дополнительной установки. Чтобы полностью оценить возможности PyInstaller, полезно еще раз вернуться к некоторым проблемам распространения, которых помогает избежать PyInstaller.

Содержание

Проблемы распространения ↑

Настройка проекта Python может быть неприятной, особенно для не разработчиков. Часто установка начинается с открытия Терминала, который не запускается для огромной группы потенциальных пользователей. Это препятствие останавливает пользователей еще до того, как руководство по установке углубится в сложные детали виртуальных сред, версий Python и т.д. и множество потенциальных зависимостей.

Вспомните, через что вы обычно проходите, настраивая новую машину для разработки Python. Вероятно, это выглядит примерно так:

  • Загрузите и установите нужную версию Python;
  • Настроить менеджер зависимостей;
  • Настроить виртуальную среду;
  • Получить копию своего кода;
  • Установить зависимости.

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

Эти проблемы взорвутся, если вашему пользователю посчастливится добраться до части установки, связанной с зависимостями. Это стало намного лучше за последние несколько лет с преобладанием колес, но для некоторых зависимостей по-прежнему требуются компиляторы C/C++ или даже FORTRAN!

PyInstaller ↑

PyInstaller скрывает эти детали от пользователя, находя все ваши зависимости и объединяя их вместе. Ваши пользователи даже не узнают, что они запускают проект Python, потому что интерпретатор Python встроен в ваше приложение. Прощай, сложная инструкция по установке!

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

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

Кроме того, PyInstaller может создавать исполняемые файлы для Windows, Linux или macOS. Это означает, что пользователи Windows получат .exe, пользователи Linux получат обычный исполняемый файл, а пользователи macOS получат пакет .app. На этот счет есть некоторые предостережения. См. Раздел ограничений для получения дополнительной информации.

Подготовка проекта ↑

PyInstaller требует, чтобы ваше приложение соответствовало некоторой минимальной структуре, а именно, чтобы у вас был сценарий CLI для запуска вашего приложения. Часто это означает создание небольшого скрипта вне вашего пакета Python, который просто импортирует ваш пакет и запускает main().

Вы можете попробовать это в своем собственном проекте или попробовать на проекте чтения каналов Real Python. Для получения более подробной информации о проекте для чтения ознакомьтесь с руководством по публикации пакета на PyPI.

Первым шагом к созданию исполняемой версии такого проекта является добавление сценария точки входа. К счастью,проект программы чтения каналов хорошо структурирован, поэтому все, что вам нужно, это небольшой сценарий вне пакета для его запуска. Например, вы можете создать файл с именем cli.py вместе с пакетом для чтения со следующим кодом:

Этот скрипт cli.py вызывает main() для запуска программы чтения каналов.

Создать этот сценарий точки входа несложно, когда вы работаете над собственным проектом, потому что вы знакомы с кодом. Однако найти точку входа в чужой код не так просто. В этом случае вы можете начать с просмотра файла setup.py в третьем -партийный проект.

Найдите ссылку на аргумент entry_points в файле setup.py проекта. Например, вот проект для чтения setup.py:

Как видите, сценарий cli.py точки входа вызывает ту же функцию, что и аргумент entry_points.

После этого изменения каталог проекта ридера должен выглядеть так, если вы извлекли его из папки с именем reader:

Обратите внимание, что сам код считывателя не изменился, только новый файл с именем cli.py. Этот сценарий точки входа обычно является всем, что необходимо для использования вашего проекта с PyInstaller.

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

Как только вы сможете запустить свое приложение с помощью скрипта Python вне вашего пакета, вы готовы попробовать PyInstaller при создании исполняемого файла.

Использование PyInstaller ↑

pip установит зависимости PyInstaller вместе с новой командой: pyinstaller. PyInstaller можно импортировать в код Python и использовать в качестве библиотеки, но вы, скорее всего, будете использовать его только как инструмент командной строки.

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

Вы увеличите вероятность того, что по умолчанию PyInstaller создаст исполняемый файл, если у вас есть только чистые зависимости Python. Однако не стоит особо беспокоиться, если у вас более сложные зависимости от расширений C/C++.

PyInstaller поддерживает множество популярных пакетов, таких как NumPy, PyQt и Matplotlib, без каких-либо дополнительных действий с вашей стороны. Вы можете узнать больше о списке пакетов, которые PyInstaller официально поддерживает, обратившись к документации PyInstaller.

Не беспокойтесь, если некоторые из ваших зависимостей не указаны в официальной документации. Многие пакеты Python работают нормально. Фактически, PyInstaller достаточно популярен, поэтому во многих проектах есть объяснения, как заставить вещи работать с PyInstaller.

Одним словом, шансы на то, что ваш проект сработает «из коробки», высоки.

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

Например, введите следующее после того, как вы cd в каталог программы чтения верхнего уровня, если вы подписаны на проект вместе с проектом чтения каналов:

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

Копаемся в артефактах PyInstaller ↑

PyInstaller сложен внутри и при работе создаёт массу информации. Итак, важно знать, на чем сосредоточиться в первую очередь. А именно исполняемый файл, который вы можете распространять среди пользователей, и потенциальную отладочную информацию. По умолчанию команда pyinstaller создает несколько интересных моментов:

  • Файл спецификации *.spec
  • Папка сборки Build
  • Папка дистрибутива Dist

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

По умолчанию файл спецификации будет назван в честь вашего сценария командной строки. Продолжая наш предыдущий пример, вы увидите файл с именем cli.spec. Вот как выглядит файл спецификации по умолчанию после запуска PyInstaller в файле cli.py:

Этот файл будет автоматически создан командой pyinstaller. У вашей версии будут разные пути, но большинство должно быть одинаковым.

Не волнуйтесь, вам не нужно понимать приведенный выше код, чтобы эффективно использовать PyInstaller!

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

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

Папка сборки Build ↑

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

Папка Dist ↑

После сборки вы получите папку dist, подобную следующей:

Вы также найдете множество файлов с расширениями .so, .pyd и .dll в зависимости от вашей операционной системы. Это общие библиотеки, которые представляют зависимости вашего проекта, которые PyInstaller создал и собрал.

Примечание. Вы можете добавить *.spec, build и dist в свой файл .gitignore, чтобы сохранить статус git в чистоте, если вы используете git для контроля версий. Файл gitignore GitHub по умолчанию для проектов Python уже делает это за вас.

Вы захотите распространить всю папку dist/cli, но вы можете переименовать cli во все, что вам подходит.

На этом этапе вы можете попробовать запустить исполняемый файл dist/cli/cli.exe, если вы следуете примеру программы чтения каналов.

Настройка ваших сборок ↑

У PyInstaller есть множество параметров, которые могут быть предоставлены в виде файлов спецификаций или обычных параметров интерфейса командной строки (CLI). Ниже вы найдете некоторые из наиболее распространенных и полезных настроек.

Вы можете создать исполняемый файл под названием realpython из cli.py скрипт с такой командой:

Эта опция не требует аргументов. Чтобы объединить свой проект в один файл, вы можете выполнить сборку с помощью такой команды:

С помощью приведенной выше команды ваша папка dist/ будет содержать только один исполняемый файл вместо папки со всеми зависимостями в отдельных файлах.

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

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

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

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

-w — избегайте автоматического открытия окна консоли для ведения журнала стандартного вывода

Это полезно только в том случае, если вы создаете приложение с графическим интерфейсом. Это помогает скрыть детали реализации, позволяя пользователям никогда не видеть терминал.

.spec файл

Поскольку это обычный скрипт Python, вы можете делать в нем практически все, что угодно. Вы можете обратиться к официальной документации файла спецификации PyInstaller для получения дополнительной информации об этом API.

Тестирование нового исполняемого файла ↑

Ключ заключается в том, чтобы запустить полученный исполняемый файл без активации вашей среды разработки. Это означает запуск без virtualenv, conda или любой другой среды, которая может получить доступ к вашей установке Python. Помните, что одна из основных целей исполняемого файла, созданного PyInstaller, состоит в том, чтобы пользователям не нужно было ничего устанавливать на их машинах.

Взяв пример с программы чтения каналов, вы заметите, что запустить исполняемый файл cli по умолчанию в папке dist/cli не удается. К счастью, ошибка указывает на проблему:

Эта команда указывает PyInstaller включить файл version.txt в папку importlib_resources в новую папку в вашей сборке с именем importlib_resources.

Примечание. В командах pyinstaller используется символ \, чтобы упростить чтение команды. Вы можете опустить \ при выполнении команд самостоятельно или скопировать и вставить команды как-ниже при условии, что вы используете те же пути.

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

Теперь запуск нового исполняемого файла приведет к новой ошибке, связанной с файлом config.cfg.

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

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

На этом этапе у вас должен быть рабочий исполняемый файл, который можно передавать напрямую пользователям!

Отладка исполняемых файлов PyInstaller ↑

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

Ниже приведены несколько распространенных стратегий, которые не указаны в определенном порядке.Часто одна из этих стратегий или их комбинация приводит к прорыву в сложных сеансах отладки.

Используйте терминал ↑

Сначала попробуйте запустить исполняемый файл из терминала, чтобы увидеть весь вывод.

Не забудьте удалить флаг -w build, чтобы увидеть весь стандартный вывод в окне консоли. Часто вы увидите исключения ImportError, если зависимость отсутствует.

Файлы отладки ↑

Сборки одного каталога ↑

Дополнительные параметры интерфейса командной строки ↑

Вот пример того, как может выглядеть ваш файл build.txt:

В этом файле будет много подробной информации о том, что было включено в вашу сборку, почему что-то не было включено и как был упакован исполняемый файл.

Примечание: -y и -Параметры clean полезны при перестройке, особенно при первоначальной настройке сборок или при сборке с непрерывной интеграцией. Эти параметры удаляют старые сборки и исключают необходимость ввода данных пользователем в процессе сборки.

Дополнительные документы PyInstaller ↑

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

Помощь в обнаружении зависимостей ↑

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

PyInstaller невероятно мощный, но у него есть некоторые ограничения. Некоторые из ограничений обсуждались ранее: скрытый импорт и относительный импорт в сценариях точки входа.

Например,если вы хотите нацелиться на широкий спектр машин Linux, вы можете использовать более старую версию CentOS. Это обеспечит совместимость с большинством версий новее, чем та, на которой вы построили. Это та же стратегия, которая описана в PEP 0513, и это то, что PyPA рекомендует для создания совместимых колес.

Фактически,Возможно, вы захотите изучить использование образа докера manylinux PyPA для вашей среды сборки Linux. Вы можете начать с базового образа, затем установить PyInstaller вместе со всеми вашими зависимостями и получить образ сборки, поддерживающий большинство вариантов Linux.

Заключение ↑

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

  1. Создайте сценарий точки входа, который вызывает вашу основную функцию.
  2. Установите PyInstaller.
  3. Запустите PyInstaller на своей точке входа.
  4. Протестируйте свой новый исполняемый файл.
  5. Отправьте полученную папку dist/ пользователям.

Ваши пользователи не должны знать, какую версию Python вы использовали или что ваше приложение вообще использует Python!

Эй, ребята! В этом руководстве мы узнаем цель и основы Python Pyinstaller. Итак, давайте начнем!

Эй, ребята! В этом руководстве мы узнаем цель и основы Python Pyinstaller Отказ Итак, давайте начнем!

Что такое Pyinstaller?

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

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

Он используется для создания файлов .exe для Windows, файлов .App для Mac и распределяемых пакетов для Linux.

Как установить Pyinstaller?

Мы можем скачать Pyinstaller из Pypi. Мы можем установить его, используя диспетчер пакетов PIP Package.

Рекомендуется создать виртуальную среду и установить там Pyinstaller.

Введите следующую команду в командной строке Windows

Теперь установите текущий каталог на местонахождение вашей программы Program.py Отказ

Запустите код, приведенный ниже. Здесь Program.py это название нашего данного сценария Python.

Pyinstaller анализирует наш код и делает следующее

  1. Создает Программа.spec Файл, который содержит информацию о файлах, которые должны быть упакованы.
  2. Создана папка сборки, которая содержит некоторые файлы журнала и рабочие файлы.
  3. Папка с именем Dist Также будет создано, в котором содержится .exe Файл с тем же именем, что и данный именем сценария Python.

Теперь есть 3 важных элемента использования Pyinstaller:

  • Файл .spec
  • Папка сборки
  • Dist папка

Что такое спецификация?

Модификация файла SPEC не требуется, кроме как в нескольких случаях, когда это полезно, когда мы хотим:

  1. Чтобы объединить наши файлы данных с приложением.
  2. Включить библиотеки времени выполнения, которые неизвестны Pyinstaller.
  3. Чтобы добавить варианты времени выполнения Python в исполняемый файл.
  4. Создать многопрограммурный пакет с объединенными общими модулями.

Чтобы создать SPEC-файл, запустите эту команду

Эта команда создает Program.py SPEC файл. Для создания приложения мы передаем файл SPEC в команду Pyinstaller:

Что такое папка сборки?

Папка сборки хранит метаданные и полезно для Отладка Отказ

Build/Program/Warn-Program.txt Файл в построить/ Папка содержит много выходов, чтобы лучше понять вещи.

Чтобы просмотреть вывод, восстановить исполняемый файл --Log-Level = Debug вариант. Рекомендуется сохранить этот вывод, чтобы обратиться к позже. Мы можем сделать это

Какая папка Dist?

Папка Dist содержит требования и исполняемые файлы для приложения. Он содержит файл .exe с тем же именем, что и наш скрипт.

Исполняемый для бега есть Dist/Program/Program.exe на окнах.

Что такое импортеррар?

Если Pyinstaller не может определить все зависимости правильно, ImportError Ошибка видна. Это происходит, когда мы используем __import __ () Отказ Импорт внутри функций или скрытых импорта.

Чтобы разрешить это мы используем, --hidden-import Отказ Эта команда включает в себя пакеты и модули автоматически.

Другой способ использует файлы крючков, которые содержат дополнительную информацию, которая помогает Pyinstaller Package UP в зависимости.

Как изменить имя нашего исполняемого файла с помощью Pyinstaller?

Чтобы избежать нашего спецификации, сборка и исполняемого файла имена как нашего имени сценариев Python, мы можем использовать -Нам команда.

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

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

Чтобы создать только один исполняемый файл вашего сценария Python, запустите код, приведенный ниже-

Тестирование нашего исполняемого исполнения

Мы всегда должны проверять наш исполняемый файл в новой машине без какой-либо среды развития, как Виртуал , Кондей И т. Д. В качестве основной цели исполняемого исполнителя Pyinstaller заключается в том, что пользователь не должен потребовать какую-либо вещь, установленную на их системе.

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

Это потому, что «ImportLib_Resources» требует version.txt файл. Мы можем добавить этот файл по команде, приведенной ниже.

Это будет включать version.txt Файл в новой папке в ImportLib_Resources папка.

Заключение

В этой статье мы узнали, как установить Pyinstaller, Run, Debug и проверить наш исполняемый файл. Ждите продолжения!

Причиной написания статьи, явилось огромное количество постоянно возникающих у новичков вопросов такого содержания: "Как собрать проект c pyqt5", "Почему не работает", "Какой инструмент выбрать" и т.д. Сегодня научимся собирать проекты без мучений и танцев с бубном.

Как-то пришлось написать небольшое desktop-приложение. В качестве языка программирования для разработки был выбран python, поскольку для решения моей задачи он подходил идеально. В стандартную библиотеку Python уже входит библиотека tkinter, позволяющая создавать GUI. Но проблема tkinter в том, что данной библиотеке посвящено мало внимания, и найти в интернете курс, книгу или FAQ по ней довольно-таки сложно. Поэтому было решено использовать более мощную, современную и функциональную библиотеку Qt, которая имеет привязки к языку программирования python в виде библиотеки PyQT5. Более подробно про PyQT можете почитать здесь. В качестве примера я буду использовать код:

Если вы более-менее опытный разработчик, то понимаете, что без интерпретатора код на python не запустить. А хотелось бы дать возможность каждому пользователю использовать программу. Вот здесь к нам на помощь и приходят специальные библиотеки позволяющие собирать проекты в .exe, которые можно потом без проблем запустить, как обычное приложение.

Существует большое количество библиотек, позволяющих это сделать, среди которых самые популярные: cx_Freeze, py2exe, nuitka, PyInstaller и др. Про каждую написано довольно много. Но надо сказать, что многие из этих решений позволяют запускать код только на компьютере, с предустановленным интерпретатором и pyqt5. Не думаю, что пользователь будет заморачиваться и ставить себе дополнительные пакеты и программы. Надеюсь, вы понимаете, что запуск программы на dev-среде и у пользователя это не одно и тоже. Также нужно отметить, что у каждого решения были свои проблемы: один не запускался, другой собирал то, что не смог потом запустить, третий вообще отказывался что-либо делать.

После долгих танцев с бубном и активным гуглением, мне все же удалось собрать проект с помощью pyinstaller, в полностью работоспособное приложение.

Немного о Pyinstaller

Pyinstaller собирает python-приложение и все зависимости в один пакет. Пользователь может запускать приложение без установки интерпретатора python или каких-либо модулей. Pyinstaller поддерживает python 2.7 и python 3.3+ и такие библиотеки как: numpy, PyQt, Django, wxPython и другие.

Pyinstaller тестировался на Windows, Mac OS X и Linux. Как бы там ни было, это не кросс-платформенный компилятор: чтобы сделать приложение под Windows, делай это на Windows; Чтобы сделать приложение под Linux, делай это на Linux и т.д.

PyInstaller успешно используется с AIX, Solaris и FreeBSD, но тестирование не проводилось.

Подробнее о PyInstaller можно почитать здесь: документация.

К тому же после сборки приложение весило всего около 15 мб. Это к слову и является преимуществом pyinstaller, поскольку он не собирает все подряд, а только необходимое. Аналогичные же библиотеки выдавали результат за 200-300 мб.

Приступаем к сборке

Прежде чем приступить к сборке мы должны установить необходимые библиотеки, а именно pywin32 и собственно pyinstaller:

Чтобы убедится, что все нормально установилось, вводим команду:

должна высветиться версия pyinstaller. Если все правильно установилось, идем дальше.

В папке с проектом запускаем cmd и набираем:

Собственно это и есть простейшая команда, которая соберет наш проект.
Синтаксис команды pyinstaller таков:

pyinstaller [options] script [script . ] | specfile

Наиболее часто используемые опции:

--onefile — сборка в один файл, т.е. файлы .dll не пишутся.
--windowed -при запуске приложения, будет появляться консоль.
--noconsole — при запуске приложения, консоль появляться не будет.
--icon=app.ico — добавляем иконку в окно.
--paths — возможность вручную прописать путь к необходимым файлам, если pyinstaller
не может их найти(например: --paths D:\python35\Lib\site-packages\PyQt5\Qt\bin)

PyInstaller анализирует файл myscript.py и делает следующее:

  1. Пишет файл myscript.spec в той же папке, где находится скрипт.
  2. Создает папку build в той же папке, где находится скрипт.
  3. Записывает некоторые логи и рабочие файлы в папку build.
  4. Создает папку dist в той же папке, где находится скрипт.
  5. Пишет исполняемый файл в папку dist.

В итоге наша команда будет выглядеть так:

После работы программы вы найдете две папки: dist и build. Собственно в папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

Вот так можно проверить версию PyInstaller.

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  3. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  4. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  5. Создает папку DIST в папке со скриптом, если она еще не существует.
  6. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.

Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.

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

После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными

Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.

Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .

Добавление файлов с данными и параметр onefile

Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.

После успешного создания файл simple1.exe появится в папке DIST.

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

Добавление файлов с данными и параметр onefile

Дополнительные импорты с помощью Hidden Imports

Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …

Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.

Например, чтобы добавить библиотеку os, нужно написать вот так:

Файл spec

Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.

PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.

Файл с расширением .spec сохраняется по умолчанию в текущей директории.

Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:

  • Собрать в один бандл с исполняемым файлы данных.
  • Включить другие исполняемые файлы: .dll или .so.
  • С помощью библиотек собрать в один бандл несколько программы.

Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.

Компилируем модель с помощью PyInstaller:

После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.

Исправим ее, обновив файл spec. Одно из решений — создать файл spec.

Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.

Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.

Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.

Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.

Создаем хуки и добавляем их в hidden imports и раздел данных.

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

Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.

Скомпилируем модель после обновления файла simpleModel.spec.

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

Вывод:

PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:

Читайте также: