Загрузка...

Compiling to Python - Pyinstaller package

Thread in Python created by Innokente12 Jun 4, 2021. 479 views

  1. Innokente12
    Innokente12 Topic starter Jun 4, 2021 0 Jan 20, 2021
    В этой теме я расскажу о пакете Pyinstaller для компиляции и сборки Python программ.

    Как вы знаете, язык Python сам по себе не компилируемый, в нем не задумывалась возможность преобразования программ в исполняемый вид. В место этого, в языке используется интерпретатор, который переводит код языка в машинный и выполняет его на месте.
    В теории, можно взять интерпретатор Python и объединить его с программой и её компонентами, получив портативную программу которую можно запускать без установки языка. Скорее всего эта мысли и пришла в голову разработчикам пакета Pyinstaller выполняющего все эти действия.

    Одним из преимуществ этого пакета является то, что он собирает только необходимые зависимости, а не все подряд, по этому приложение на выходе имеет меньший вес по сравнению с другими библиотеками.
    Pyinstaller поддерживает Python 2.7, Python 3.3 и выше, такие библиотеки как: numpy, PyQt, Django, wxPython, Tkinter и другие.


    ▏▬▬Сборка▬▬▕
    Команда установки через pip -
    Code
    pip install pyinstaller
    .


    Разберем процесс сборки программы.
    В терминале нужно перейти в директорию с проектом и выполнить команду:
    Code
    pyinstaller filename.py
    Эта команда и соберет наш проект, вот ее синтаксис:
    Code
    pyinstaller [options] file | specfile
    Достаточно просто, но у этой команды есть другие полезные опции:
    --onefile или -F — сборка в один файл, т.е. файлы .dll не пишутся.
    --onedir или -D — сборка с .dll файлами.
    --windowed — при запуске приложения, будет появляться консоль.
    --noconsole — при запуске приложения, консоль появляться не будет.
    --icon= — иконка в окне приложения.
    --add-data "filename" — позволяет добавить файлы которые будут использоваться exe-файлом, к примеру .json. Эту опцию можно использовать много раз.

    Алгоритм работы у pyinstaller следующий:
    1. Анализирует код для выявления всех зависимостей.
    2. Создает файл .spec, который содержит название программы, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
    3. Собирает копии всех библиотек и файлов вместе.
    4. Создает папку BUILD в директории с программой и записывает **** вместе с рабочими файлами.
    5. Создает папку DIST в директории с программой, и записывает все необходимые файлы вместе с исполняемым файлом программы.
    Если собирать программу с опцией `--onefile`, то файлы из пункта 5 будут находится в исполняемом файле, который в свою очередь в папке DIST.


    ▏▬▬Возможные ошибки▬▬▕
    При сборке приложения, не рекомендуется иметь пробелы в названиях папок по пути к Python-программе, это может вызвать ошибки.
    Однако, кроме таких простых ошибок, могут появляться более сложные, к примеру ошибка вызываемая неправильным путем к файлам pyinstaller:
    Code
     File "C:\Users\Кеша\AppData\Local\Programs\Python\Python37-32\Scripts\pyinstal
    ler-script.py", line 1
    SyntaxError: Non-UTF-8 code starting with '\xea' in file C:\Users\Кеша\AppData\L
    ocal\Programs\Python\Python37-32\Scripts\pyinstaller-script.py on line 1, but no
    encoding declared; see http://python.org/dev/peps/pep-0263/ for details
    Эта ошибка достаточно распространена и возникает в случае если по пути установки Python, и соответственно pyinstaller находятся папки с Кириллицей в названиях.
    Решить эту ошибку можно изменив путь установки Python, или же поменяв кодировку скрипта вызываемого ошибку.

    Рассмотрим второй вариант решения.
    1. Откройте файл pyinstaller- из папки Scripts в той директории где у вас установлен Python, проще говоря откройте скрипт вызывающий ошибку.
    2. Вторым действием вставьте следующую строку в самое начало скрипта-
    Code
    # This Python file uses the following encoding: utf-8 в начало этого скрипта и сохраните изменения.
    Эта строка указывает на кодировку файла, с ней скрипт будет поддерживать такой не стандартный ранее путь до себя.
    После этих манипуляций со скриптом, ошибка исчезнет.

    На этом у меня все, надеюсь моя тема была вам полезна, спасибо за внимание.
     
  2. ИроничныйЧёрт
    [IMG] паста э
     
Loading...