Python

PyInstaller: как собрать Python в exe и не потерять файлы проекта

PyInstaller нужен, когда вы написали Python-скрипт и хотите запустить его как обычную программу. На Windows результатом часто ждут .exe файл, на macOS и Linux — исполняемый файл или папку сборки

Важно: PyInstaller не «переводит Python в C++». Он собирает ваш код, интерпретатор Python и зависимости в пакет, который можно запускать без отдельной команды python app.py

Что мы соберем

Создайте файл app.py

name = input("Как вас зовут? ")
print(f"Привет, {name}!")
input("Нажмите Enter, чтобы закрыть окно")

Последняя строка нужна для Windows, если вы запускаете .exe двойным кликом. Без нее окно может быстро закрыться после вывода текста

Подготовьте проект

Создайте папку pyinstaller-demo

Проверьте, что скрипт запускается обычным способом

Windows:

py app.py
python3 app.py

Если обычный запуск не работает, PyInstaller тоже не спасет. Сначала нужно исправить сам код

Создайте виртуальное окружение

Windows:

py -m venv .venv
.venv\Scripts\activate
python3 -m venv .venv
source .venv/bin/activate

Установите PyInstaller:

python -m pip install pyinstaller

Проверьте установку:

pyinstaller --version

Первая сборка

Выполните команду:

pyinstaller app.py

После сборки появятся папки build и dist, а также файл app.spec

Главное лежит в dist/app/. На Windows внутри будет app.exe

Один exe-файл через onefile

Если хотите получить один файл, используйте --onefile

pyinstaller --onefile app.py

Результат будет лежать в dist/app.exe на Windows или dist/app на macOS/Linux

У --onefile есть цена: программа может запускаться чуть дольше, потому что при старте ей нужно распаковать временные файлы

Для учебы удобно начинать с обычной сборки без --onefile, а когда все работает — собирать один файл

Как убрать консольное окно

Для графических приложений иногда используют --windowed

pyinstaller --onefile --windowed app.py

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

Если программа общается через input() и print(), консоль оставляем

Как добавить файлы рядом с программой

Частая проблема: в Python-скрипте есть data.csv, картинка или шаблон, но в .exe программа его не видит

Для начала соберите обычную папку без --onefile и положите файл рядом с исполняемым файлом в dist/app

Если нужно упаковать файл через PyInstaller, используйте --add-data

Windows:

pyinstaller --onefile --add-data "data.csv;." app.py
pyinstaller --onefile --add-data "data.csv:." app.py

Разделитель отличается: на Windows точка с запятой, на macOS и Linux двоеточие

Можно ли собрать exe для Windows на macOS

В обычном учебном сценарии — нет. PyInstaller собирает программу под ту систему, на которой запущена сборка

Если нужен Windows .exe, собирайте на Windows

Если нужен файл для macOS, собирайте на macOS

Если нужен Linux-бинарник, собирайте на Linux

Частые ошибки

ModuleNotFoundError после запуска exe

Библиотека установлена не в то окружение. Активируйте .venv, установите пакет и соберите заново

python -m pip install имя_пакета
pyinstaller --onefile app.py

Программа запускается и сразу закрывается

Добавьте временно:

input("Нажмите Enter для выхода")

Так вы увидите текст ошибки или результат выполнения

После сборки ничего не изменилось

Удалите папки build, dist и файл .spec, затем соберите заново. Иногда новичок запускает старый .exe и думает, что PyInstaller не подхватил изменения

Чем этот материал отличается от обычного Python to Exe

Запрос py to exe часто закрывают одной кнопкой или онлайн-конвертером. Здесь важнее понять рабочий процесс: проверить скрипт, создать виртуальное окружение, собрать через PyInstaller, разобраться с onefile, файлами данных и запуском на целевой системе

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x