MyTetra Share
Делитесь знаниями!
Собираем проект на python3&PyQT5 под Windows, используя PyInstaller
Время создания: 31.07.2018 09:25
Текстовые метки: python pyinstaller guide
Раздел: Python - Pyinstaller
Запись: Velonski/mytetra-database/master/base/1533011109g0ok5jqjbn/text.html на raw.githubusercontent.com

Причиной написания статьи, явилось огромное количество постоянно возникающих у новичков вопросов такого содержания: "Как собрать проект c pyqt5", "Почему не работает", "Какой инструмент выбрать" и т.д. Сегодня научимся собирать проекты без мучений и танцев с бубном.


Как-то пришлось написать небольшое desktop-приложение. В качестве языка программирования для разработки был выбран python, поскольку для решения моей задачи он подходил идеально. В стандартную библиотеку Python уже входит библиотека tkinter, позволяющая создавать GUI. Но проблема tkinter в том, что данной библиотеке посвящено мало внимания, и найти в интернете курс, книгу или FAQ по ней довольно-таки сложно. Поэтому было решено использовать более мощную, современную и функциональную библиотеку Qt, которая имеет привязки к языку программирования python в виде библиотеки PyQT5. Более подробно про PyQT можете почитать здесь. В качестве примера я буду использовать код:


#!/usr/bin/python3

# -*- coding: utf-8 -*-


import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtGui import QIcon


class Example(QWidget):


def __init__(self):

super().__init__()


self.initUI()


def initUI(self):


self.setGeometry(300, 300, 300, 220)

self.setWindowTitle('Icon')

self.setWindowIcon(QIcon('web.png'))


self.show()


if __name__ == '__main__':


app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())


Если вы более-менее опытный разработчик, то понимаете, что без интерпретатора код на python не запустить. А хотелось бы дать возможность каждому пользователю использовать программу. Вот здесь к нам на помощь и приходят специальные библиотеки позволяющие собирать проекты в .exe, которые можно потом без проблем запустить, как обычное приложение.


Существует большое количество библиотек, позволяющих это сделать, среди которых самые популярные: cx_Freeze, py2exe, nuitka, PyInstaller и др. Про каждую написано довольно много. Но надо сказать, что многие из этих решений позволяют запускать код только на компьютере, с предустановленным интерпретатором и pyqt5. Не думаю, что пользователь будет заморачиваться и ставить себе дополнительные пакеты и программы. Надеюсь, вы понимаете, что запуск программы на dev-среде и у пользователя это не одно и тоже. Также нужно отметить, что у каждого решения были свои проблемы: один не запускался, другой собирал то, что не смог потом запустить, третий вообще отказывался что-либо делать.


После долгих танцев с бубном и активным гуглением, мне все же удалось собрать проект с помощью pyinstaller, в полностью работоспособное приложение.


Немного о Pyinstaller


Pyinstaller собирает python-приложение и все зависимости в один пакет. Пользователь может запускать приложение без установки интерпретатора python или каких-либо модулей. Pyinstaller поддерживает python 2.7 и python 3.3+ и такие библиотеки как: numpy, PyQt, Django, wxPython и другие.


Pyinstaller тестировался на Windows, Mac OS X и Linux. Как бы там ни было, это не кросс-платформенный компилятор: чтобы сделать приложение под Windows, делай это на Windows; Чтобы сделать приложение под Linux, делай это на Linux и т.д.


PyInstaller успешно используется с AIX, Solaris и FreeBSD, но тестирование не проводилось.


Подробнее о PyInstaller можно почитать здесь: документация.


К тому же после сборки приложение весило всего около 15 мб. Это к слову и является преимуществом pyinstaller, поскольку он не собирает все подряд, а только необходимое. Аналогичные же библиотеки выдавали результат за 200-300 мб.


Приступаем к сборке


Прежде чем приступить к сборке мы должны установить необходимые библиотеки, а именно pywin32 и собственно pyinstaller:


pip install pypiwin32

pip install pyinstaller


Чтобы убедится, что все нормально установилось, вводим команду:


pyinstaller --version


должна высветиться версия pyinstaller. Если все правильно установилось, идем дальше.


В папке с проектом запускаем cmd и набираем:


pyinstaller myscript.py


Собственно это и есть простейшая команда, которая соберет наш проект.

Синтаксис команды pyinstaller таков:


pyinstaller [options] script [script ...] | specfile


Наиболее часто используемые опции:


--onefile — сборка в один файл, т.е. файлы .dll не пишутся.

--windowed -при запуске приложения, будет появляться консоль.

--noconsole — при запуске приложения, консоль появляться не будет.

--icon=app.ico — добавляем иконку в окно.

--paths — возможность вручную прописать путь к необходимым файлам, если pyinstaller

не может их найти(например: --paths D:\python35\Lib\site-packages\PyQt5\Qt\bin)


PyInstaller анализирует файл myscript.py и делает следующее:


Пишет файл myscript.spec в той же папке, где находится скрипт.

Создает папку build в той же папке, где находится скрипт.

Записывает некоторые логи и рабочие файлы в папку build.

Создает папку dist в той же папке, где находится скрипт.

Пишет исполняемый файл в папку dist.


В итоге наша команда будет выглядеть так:


pyinstaller --onefile --icon=name.ico --noconsole myscript.py


После работы программы вы найдете две папки: dist и build. Собственно в папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.


Спасибо за внимание. Надеюсь статья была вам полезна.

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования