Содержание статьи

Pyinstaller позволяет создавать автономные исполняемые файлы из Python-скриптов на Linux без необходимости устанавливать интерпретатор на целевой системе. Для работы требуется Python версии 3.6 и выше, а также библиотека pip для установки Pyinstaller. На Ubuntu и Debian установка выполняется командой sudo apt install python3-pip, затем pip3 install pyinstaller.
Простой запуск сборки скрипта выполняется через команду pyinstaller имя_скрипта.py. По умолчанию создается папка dist с исполняемым файлом и папка build с промежуточными данными. Для получения одного файла используется опция —onefile, которая объединяет все зависимости и скрипт в один бинарный файл.
Для корректной работы приложений с графическим интерфейсом или сторонними библиотеками необходимо явно указывать дополнительные файлы и ресурсы через параметры —add-data и —hidden-import. В Linux пути указываются через двоеточие, например: —add-data «путь/к/файлу:папка_в_сборке». Это гарантирует, что все нужные файлы будут доступны исполняемому приложению.
Отладка сборки проводится через просмотр логов в папке build и запуск исполняемого файла с терминала. Ошибки, связанные с отсутствующими модулями, решаются добавлением их через —hidden-import или корректировкой скрипта. Для проверки работоспособности рекомендуется запускать собранный файл на чистой системе или в Docker-контейнере.
Установка Pyinstaller на разных дистрибутивах Linux
Для использования Pyinstaller на Linux сначала необходимо установить Python и pip. На большинстве современных дистрибутивов Python 3 установлен по умолчанию, но pip может отсутствовать.
- Ubuntu / Debian:
- Обновите пакеты: sudo apt update
- Установите pip: sudo apt install python3-pip
- Установите Pyinstaller: pip3 install pyinstaller
- Fedora:
- Установите pip: sudo dnf install python3-pip
- Установите Pyinstaller: pip3 install pyinstaller
- Arch Linux / Manjaro:
- Установите pip: sudo pacman -S python-pip
- Установите Pyinstaller: pip install pyinstaller
После установки проверьте корректность командой pyinstaller —version. Если версия отображается, библиотека готова к использованию.
Для обновления Pyinstaller используйте pip3 install —upgrade pyinstaller. Это важно при работе с новыми версиями Python или сторонними библиотеками, которые могут требовать актуальных исправлений.
Создание исполняемого файла из Python-скрипта
Для сборки Python-скрипта в исполняемый файл используется команда pyinstaller имя_скрипта.py. По умолчанию Pyinstaller создаёт папку dist с готовым бинарником и папку build для временных файлов.
Основные опции при создании исполняемого файла:
| Опция | Описание | Пример |
|---|---|---|
| —onefile | Создаёт один исполняемый файл, объединяя все зависимости | pyinstaller —onefile script.py |
| —noconsole | Отключает открытие консоли для графических приложений | pyinstaller —onefile —noconsole gui.py |
| —name | Задаёт имя готового исполняемого файла | pyinstaller —name myapp script.py |
| —icon | Добавляет иконку для бинарного файла | pyinstaller —onefile —icon=icon.ico script.py |
После сборки исполняемый файл находится в папке dist. Для проверки запуска используйте команду ./dist/имя_файла. Важно тестировать файл на системе без установленного Python, чтобы убедиться, что все зависимости встроены корректно.
Использование опций для одного файла и папки

Pyinstaller позволяет создавать сборки двумя способами: в виде одного файла или в виде папки с отдельными файлами. Для сборки в один файл используется опция —onefile, которая объединяет скрипт и все зависимости в один исполняемый бинарник. Это упрощает перенос приложения и уменьшает вероятность ошибок при запуске на других системах.
Пример команды для одного файла:
pyinstaller —onefile script.py
Если требуется оставить структуру с отдельными файлами, используется стандартная сборка без —onefile. В этом случае Pyinstaller создаёт папку dist/имя_скрипта, в которой находятся бинарный файл, библиотеки и дополнительные файлы проекта. Такой подход удобен для отладки или работы с большими проектами, где отдельные зависимости проще обновлять.
Для уточнения расположения выходных файлов можно использовать опцию —distpath для папки с бинарником и —workpath для временных файлов. Пример команды:
pyinstaller —onefile —distpath /home/user/app_dist —workpath /home/user/app_build script.py
Опция —clean удаляет временные файлы предыдущих сборок и помогает избежать конфликтов зависимостей при повторной сборке. Рекомендуется использовать её перед сборкой после изменений в проекте.
Добавление ресурсов и зависимостей в сборку
Pyinstaller автоматически собирает большинство зависимостей, но иногда необходимо вручную добавлять файлы, библиотеки или скрытые модули. Для включения дополнительных ресурсов используется опция —add-data, а для скрытых импортов – —hidden-import.
- Добавление файлов и папок:
- Формат: —add-data «путь_к_файлу:папка_в_сборке»
- Пример для Linux: pyinstaller —onefile —add-data «config.json:.» script.py
- Для нескольких файлов повторно используйте —add-data для каждого ресурса
- Скрытые импорты:
- Используется, если Pyinstaller не обнаружил модуль автоматически
- Пример: pyinstaller —onefile —hidden-import=pkg_resources script.py
- Использование данных в коде:
- Встроенные пути необходимо получать через sys._MEIPASS для корректной работы в режиме —onefile
- Пример: os.path.join(sys._MEIPASS, ‘config.json’)
Для больших проектов рекомендуется заранее составить список всех зависимостей и ресурсов, чтобы избежать ошибок на этапе запуска готового бинарника. Это особенно важно для приложений с графическим интерфейсом или внешними библиотеками.
Настройка и исправление ошибок при сборке

Если при запуске исполняемого файла появляются ошибки ImportError, добавьте соответствующие модули через —hidden-import. Для библиотек с динамическими зависимостями, например PyQt5 или tkinter, может потребоваться явное включение папок с ресурсами.
Конфликты версий решаются обновлением Pyinstaller до последней версии с помощью pip3 install —upgrade pyinstaller и проверкой совместимости библиотек проекта с текущей версией Python.
Проблемы с путями к файлам в режиме —onefile устраняются использованием переменной sys._MEIPASS для доступа к встроенным ресурсам. В коде это выглядит так: os.path.join(sys._MEIPASS, ‘имя_файла’).
Для повторной сборки рекомендуется использовать опцию —clean, которая удаляет временные папки build и старые данные, чтобы исключить влияние предыдущих ошибок на новую сборку.
Запуск и тестирование готового исполняемого файла

Для проверки корректности работы рекомендуется запускать файл на системе без установленного Python, чтобы убедиться, что все зависимости встроены. Это можно сделать в отдельном контейнере Docker или виртуальной машине с минимальной Linux-сборкой.
Ошибки при запуске чаще всего связаны с отсутствием библиотек или неверными путями к ресурсам. Для диагностики включите флаг —debug при сборке или используйте терминал для запуска, чтобы видеть сообщения об ошибках.
После успешного запуска выполните проверку всех функций программы, включая доступ к файлам, графический интерфейс и сторонние библиотеки. Это позволяет выявить скрытые проблемы, которые могут возникнуть при переносе приложения на другие Linux-системы.
Вопрос-ответ:
Как установить Pyinstaller на Ubuntu и других дистрибутивах Linux?
На Ubuntu и Debian сначала обновите список пакетов командой sudo apt update, затем установите pip: sudo apt install python3-pip. После этого выполните pip3 install pyinstaller. На Fedora используется sudo dnf install python3-pip с последующей установкой Pyinstaller через pip. В Arch Linux и Manjaro пакеты устанавливаются через sudo pacman -S python-pip и pip install pyinstaller. После установки проверьте работу команды pyinstaller —version.
Как собрать Python-скрипт в один исполняемый файл?
Для создания одного бинарного файла используется опция —onefile. Команда выглядит так: pyinstaller —onefile script.py. В результате все зависимости и сам скрипт объединяются в один исполняемый файл в папке dist. Для графических приложений рекомендуется добавить —noconsole, чтобы терминал не открывался при запуске.
Как добавить сторонние файлы и скрытые модули в сборку?
Дополнительные ресурсы включаются через —add-data с форматом путь_к_файлу:папка_в_сборке. Например: pyinstaller —onefile —add-data «config.json:.» script.py. Если Pyinstaller не видит модуль, его добавляют через —hidden-import, например: pyinstaller —onefile —hidden-import=pkg_resources script.py. В коде пути к встроенным файлам нужно получать через sys._MEIPASS.
Что делать, если исполняемый файл не запускается на другой системе?
Проблема обычно связана с отсутствием библиотек или ресурсов. Проверьте наличие всех зависимостей и корректность путей к файлам. Используйте флаг —debug при сборке для отображения сообщений об ошибках. Если приложение создавалось с —onefile, убедитесь, что доступ к ресурсам осуществляется через sys._MEIPASS. Также можно собрать файл без —onefile для проверки, чтобы увидеть структуру папки и все включенные библиотеки.
Как проверить работу исполняемого файла после сборки?
Исполняемый файл находится в папке dist. Запуск через ./dist/имя_файла позволяет проверить основные функции. Для тестирования на чистой системе используйте Docker-контейнер или виртуальную машину без установленного Python. Проверяйте работу доступа к файлам, работу графического интерфейса и сторонних библиотек, чтобы убедиться, что сборка корректна и все ресурсы включены.
Как проверить, что собранный с помощью Pyinstaller исполняемый файл правильно работает на другой Linux-системе без установленного Python?
Для проверки используйте чистую систему или виртуальную машину без установленного Python. Скопируйте туда папку dist с готовым бинарником и запустите файл командой ./имя_файла. Если приложение использует внешние ресурсы, убедитесь, что они включены через —add-data и пути к ним корректно указываются через sys._MEIPASS. Любые ошибки ImportError или отсутствие файлов укажут на пропущенные зависимости. Также полезно включить флаг —debug при сборке, чтобы видеть сообщения о загрузке модулей и искать проблемы до распространения приложения.
