Pull to refresh

Python, Qt и немного кроссплатформенности

Lumber room
image
Представляю вашему вниманию небольшую выдержку из моей курсовой работы (точнее это учебно-ознакомительная практика).
Опуская множество ненужной на Хабре теоретической воды, продемонстрирую на некотором достаточно синтетическом примере, как перенести маленькую программулину с Linux на Windows.
Замечу, это не инструкция и не в коей мере на нее не претендует. Это небольшой обзор процесса, чтобы показать как обстоят дела.

Python, Qt и PyQt есть практически в любом дистре, а в случае чего можно быстро и просто доставить (точно не знаю размеры пакетов, но субъективно — небольшие).
Наше приложение представляет собой список именованных цветов и текстовое поле с настраиваемыми цветами фона и шрифта. Его код можно посмотреть в по ссылкам ниже.
В итоге получился файл col.py размером 6,31 КБ (6 468 байт) и файл интерфейса cui.py — 6,56 КБ (6 724 байт). Файл col.txt содержит список цветов.
Интерфейс формируется с помощью визуального редактора – QtDesigner. Программа создает файл с расширением ui, где в формате XML описывается структура интерфейса. Затем с помощью утилиты pyuic из этого файла формируется класс языка Python, который подключается к основному файлу посредством следующего кода.
Заранее прошу прощения за кривоватый интерфейс — пока нет возможности переделать.
Собственно, нам осталось дать файлу права на выполнение и можно запускать.

Совсем по-другому дело обстоит с Windows. Чтобы запустить этот файл нам придется:
• Установить интерпретатор Python (14 мб)
• Установить библиотеку Qt (200-280 мб)
• Установить привязки PyQt (17мб)
Многовато для программки в 12кб, учитывая, что нам придется самостоятельно искать, где скачать дистрибутивы и вручную их устанавливать. Чтобы не заставлять пользователя выкачивать более трех сотен мегабайт, мы скомпилируем исполняемый exe-файл, который будет требовать только сами файлы библиотек (порядка 20 мб). Конечно, это тоже далеко от идеала, зато наглядно демонстрирует положение дел.
Для компиляции исполняемого файла, помимо вышеперечисленного, нам понадобится программа py2exe (200кб). Следуя инструкции мы формируем файл setup.py с помощью которого мы передаем нужные аргументы утилите. Кстати, для работы с PyQt4 нам придется немножко поколдовать с файлами компилятора. Процесс компиляции (не забываем про параметры типа "--include sip") и на выходе у нас папка с исполняемым файлом и библиотеками. Общим размером 19 мб. Сам же exe-файл весит всего 20 кб, однако ему требуется еще множество файлов для работы.

А теперь поговорим о том, насколько же хорошо он работает.
Для примера возьмем функцию копирования цвета в буфер обмена. Довольно скоро выяснится, что в Linux нет единого буфера, а используются буферы X-сервера, Qt или Gtk. А PyQt под Windows не поддерживает функции буфера обмена. То есть, чтобы функция работала как надо, нам с самого начала придется определять, на какой платформе запущенна программа, и подключать соответствующие функции.
Или другой пример – пункт меню, генерирующий сигнал на выход из приложения. Мне так и не удалось выяснить причину того, почему под управлением Windows программа не реагировала на него.

Увы, чтобы программа идеально работала под различные ОС, придется либо писать разные версии исходного кода, так как мы уже увидели, что даже использование кроссплатформенных функций интерпретируемого языка и известной своей переносимостью библиотеки не дает правильного функционирования. А для того, чтобы один и тот же код работал на разных платформах, придется значительно усложнить цикл разработки – исправление, тестирование, перенос, тестирование, компиляция, тестирование.
Хочется отметить, что скомпилированный нами исполняемый файл, запущенный под ОС Linux с помощью программы Wine вел себя точно так же как и в реальной Windows, за исключением того, что наотрез отказался отображать текст. Хотя все шрифты установлены и настроены.

P.S. Мой первый топик — жду критики. Отмечу, что это работа на тему, о которой хоть что-то знает лишь 2-2.5 препода на кафедре, так что технические детали им совершенно… Но если у Вас есть замечания или пожелания — милости прошу.
Tags: linuxwindowsкроссплатформенностьpythonqtpyqt4
Hubs: Lumber room
Total votes 21: ↑18 and ↓3 +15
Comments 14
Comments Comments 14

Popular right now