Программирование (Python): Ошибка pyinstaller: error: unrecognized arguments: -onefile. Как правильно объединить аргументы —onefile и —add-data при сборке .exe?

Ошибка `error: unrecognized arguments: -onefile` в PyInstaller возникает по одной простой причине: вы используете одно тире вместо двух. Правильный флаг пишется с двумя дефисами: `—onefile`, а не `-onefile`. Это классическая опечатка, которая сразу же прерывает сборку.

## Правильный синтаксис команды

Корректная команда для сборки одиночного .exe файла выглядит так:

pyinstaller —onefile your_script.py

Если вы хотите добавить дополнительные файлы (например, изображения, конфиги, базы данных), используйте флаг `—add-data`. Его синтаксис различается в зависимости от операционной системы.

### Windows:

pyinstaller —onefile —add-data «source_file;destination_folder» your_script.py

Разделитель — точка с запятой (`;`).

### Linux / macOS:

pyinstaller —onefile —add-data «source_file:destination_folder» your_script.py

Разделитель — двоеточие (`:`).

## Пример с несколькими файлами

Если нужно добавить несколько ресурсов, каждый указывается отдельным флагом `—add-data`:

pyinstaller —onefile
—add-data «assets/logo.png;assets»
—add-data «config/settings.json;config»
your_script.py

## Как получить доступ к добавленным файлам в коде

При запуске упакованного .exe файлы распаковываются во временную директорию. Чтобы правильно получить путь к ним, используйте следующий паттерн:

python
import sys
import os

def resource_path(relative_path):
«»»Получить абсолютный путь к ресурсу, работает для dev и для PyInstaller.»»»
try:
base_path = sys._MEIPASS
except AttributeError:
base_path = os.path.abspath(«.»)
return os.path.join(base_path, relative_path)

# Использование:
logo_path = resource_path(«assets/logo.png»)

`sys._MEIPASS` — это специальная переменная PyInstaller, которая указывает на временную папку с распакованными ресурсами.

## Дополнительные полезные флаги

— `—noconsole` или `—windowed` — скрыть консольное окно (для GUI-приложений)
— `—icon=app.ico` — задать иконку для .exe
— `—name=MyApp` — задать имя выходного файла
— `—clean` — очистить кэш перед сборкой

## Полная команда-пример

pyinstaller —onefile —noconsole —icon=app.ico —add-data «assets;assets» —name=MyApp your_script.py

После успешной сборки готовый .exe файл будет находиться в папке `dist/` в директории вашего проекта. Папки `build/` и файл `*.spec` можно удалить или сохранить для повторной сборки.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.