PyInstaller собирает приложение Python и все его зависимости в единый пакет. Пользователь может запускать упакованное приложение без установки интерпретатора Python или каких-либо модулей. PyInstaller поддерживает Python 3.7 и новее, и корректно собирает многие основные пакеты Python, такие как numpy, matplotlib, PyQt, wxPython и другие.
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
pip install PyInstaller
Проверка версии PyInstaller.
pyinstaller --version
У меня установка была несколько другой. Саму библиотеку я установил через менеджер библиотек PyCharm, однако внутри него не удалось его адекватно запустить. Пришлось работать с pyinstaller непосредственно через Minicond-у.
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы.
- Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F, то все окажется в одном исполняемом файле.
Параметр --add-data позволяет добавить файлы с данными, которые нужно сохранить в одном бандле с исполняемым файлом. Этот параметр можно применить много раз.
Применение: pyinstaller --add-data "Audio_player.py;." Unificator.py
Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.
PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.
Файл с расширением .spec сохраняется по умолчанию в текущей директории.
Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:
- Собрать в один бандл с исполняемым файлы данных.
- Включить другие исполняемые файлы: .dll или .so.
- С помощью библиотек собрать в один бандл несколько программы.
Дополнительные импорты с помощью Hidden Imports
Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named…
Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.
Например, чтобы добавить библиотеку wave, нужно написать вот так:
pyinstaller --onefile --add-data "Audio_player.py;." — hidden-import "wave" Unificator.py
Для иллюстрации работы pyinstaller было написано 4 простеньких скрипта, что объединятся в меню выбора 5-го. Чтобы сгенерировать .exe файл необходимо применить следующую команду находясь в директории, что содержит целевой скрипт.
pyinstaller --onefile --add-data "Audio_player.py;." --add-data "Data_vizualizer.py;." --add-data "Image_filter.py;." --add-data "Website_scrapper.py;." Unificator.py
В результате ее выполнения образуется файл расширения .spec и две папки build и dist. В папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.
Следующим шагом закидываем 42.jpg, 1000 Sales Records.csv и Terentij.wav в папку dist и запускаем полученный Unificator.exe. Антивирус может недолго ругаться, но не должен помешать повторно запустить .exe и посмотреть варианты в меню.