Сборка библиотеки wxPython под Windows | jenyay.net

Сборка библиотеки wxPython под Windows

Дата публикации: 09.01.2023
Дата последней правки: 10.06.2023

Содержание

Введение

wxPython - это сравнительно легковесная (по сравнению с Qt) библиотека для создания графического интерфейса приложений на языке Python. По сути wxPython является оболочкой над библиотекой wxWidgets, написанной на языке C++. Хотя разработчики wxPython подготавливают бинарные сборки библиотеки под различные операционные системы (Windows, Linux и macOS), но бывают случаи, когда требуется самостоятельно собрать библиотеку из исходников. В частности, для wxPython 4.2.1, на примере которой будет показан процесс сборки в данной статье, на pypi есть сборки только под 64-битные версии Windows, однако библиотека вполне может работать и на 32-битных системах, для этого нужно всего лишь собрать ее из исходников.

Если в системе, для которой отсутствует бинарная сборка, выполнить команду для установки библиотеки

python -m pip install wxpython

то pip попробует собрать пакет из исходников самостоятельно. Если у вас в системе установлены все необходимые библиотеки, то скорее всего это ему даже удастся. Но, во-первых, это процесс достаточно долгий (на моем стареньком i7-3770 этот процесс занимает больше получаса), и поэтому иногда желательно один раз скомпилировать себе требуемую бинарную сборку, а потом ее быстро устанавливать, не ожидая новой пересборки. И, во-вторых, если проблема сборки выявится на этапе компиляции с использованием pip, определить причину неудачи будет сложнее по сравнению со случаем, когда вы будете собирать библиотеку по шагам самостоятельно.

К тому же процесс сборки библиотеки достаточно простой и не требует каких-то особых знаний и шаманств, он подробно описан в документации (в файле README.rst в корне исходников), но кто ж ее читает :), и к тому же могут возникнуть проблемы с отсутствующими библиотеками или требуемыми приложениями для сборки, и поэтому лучше сразу установить все необходимое, чтобы процесс сборки прошел гладко.

Процесс сборки

Установка требуемых инструментов

Для сборки под Windows понадобятся следующие инструменты:

  • git.
  • Python.
  • MS Build Tools с установленной опцией "Desktop Development with C++".
  • graphviz (используется для сборки справки).

Относительно git и Python, я думаю, вопросов быть не должно. Отмечу лишь, что для сборки wxPython вполне можно (и адже это будет правильнее) использовать виртуальное окружение Python с требуемой версией интерпретатора, но в дальнейшем для простоты будем подразумевать, что виртуальное окружение не используется, и требуемые библиотеки установлены глобально.

В дальнейшем процесс сборки я буду показывать на примере использования Python 3.8 32-bit. Эта достаточно старая версия Python выбрана, потому что это последняя версия интерпретатора, которая работает на Windows 7. Если вам нужно, чтобы ваша программа работала на этой пока еще не совсем редкой операционной системе (хорошо хоть не на Windows XP), то придется ограничиться Python 3.8. Ну а 32-битная версия была выбрана из-за того, что бинарная сборка для 64 бит лежит в pypi (в том числе и для Python 3.8), и в большинстве случаев нет смысла ее собирать самостоятельно. Несмотря на использование столь старой версии интерпретатора, примеры будут приводиться при компиляции в Windows 10 64-bit.

С установкой MS Build Tools проблем обычно тоже не возникает. Инсталятор сам прописывает все требуемые пути в переменные окружения, чтобы скрипт сборки мог использовать компилятор C++.

Скриншот инсталятора с выбранной опцией "Desktop Development with C++" показан на следующем рисунке:

build_tools.png: 1280x720, 88k (08.01.2023 11:17)

Что касается Graphviz, то его нужно не просто установить, но и прописать путь до его запускаемого файла в переменной окружения PATH. Если вы устанавливали GraphViz в папку по умолчанию (C:\Program Files\GraphViz), то в PATH нужно добавить путь C:\Program Files\GraphViz\bin:

graphviz_path.png: 619x586, 22k (08.01.2023 11:33)

GraphViz - это инструмент для генерации картинок с диаграммами по текстовому описанию. Он часто используется для создания справки, например, для создания диаграмм наследования классов.

Затем надо установить требуемые для сборки библиотеки для Python:

pip install attrdict3 sip sphinx wheel

Библиотека attrdict используется в скрипте сборки. Эта библиотека предоставляет нестандартную коллекцию, напоминающую словарь, отличие которого заключается в том, что ключи можно запрашивать и через квадратные скобки, и как доступ к свойствам. Одна из плюшек этой библиотеке заключается в том, что она позволяет создавать данный объект по текстовому представлению, например из строки в формате yaml.

Библиотека sip используется для создания Python-обертки над библиотекой, написанной на C++. Об этой библиотеке я когда-то писал статью в двух частях: Создание Python-обвязки для библиотек, написанных на C/C++, с помощью SIP. Часть 1 и часть 2.

Библиотека Sphinx используется для генерации документации.

Библиотека wheel используется для сборки пакетов в формате wheel.

Клонирование репозитория с исходниками

Исходные коды библиотеки wxPython расположены в репозитории github https://github.com/wxWidgets/Phoenix. Такое странное название исторически сложилось как кодовое имя проекта в процессе перехода wxPython с Python 2 на Python 3. Это был долгий и мучительный процесс.

Для начала нужно клонировать исходники из репозитория и перейти в созданную после клонирования папку с исходниками. Для этого в консоли нужно выполнить команды:

git clone https://github.com/wxWidgets/Phoenix
cd Phoenix

clone.png: 978x552, 25k (08.01.2023 12:13)

Затем нужно переключиться на требуемую версию, если только вы не планируете собирать текущую ветку master, которая еще находится в разработке. Например, для версии wxPython 4.2.1 имя тега - "wxPython-4.2.1".

git checkout wxPython-4.2.1

checkout_tag.png: 978x552, 31k (08.01.2023 12:15)

После этого нужно скачать сабмодули и при этом не забыть установить флаг --recursive.

git submodule update --init --recursive

submodules.png: 978x664, 82k (08.01.2023 12:24)

Компиляция

Теперь мы подошли к самому волнительному моменту, на котором обычно и возникают ошибки, как правило связанные с отсутствующими библиотеками. По идее, если все библиотеки установлены и пути до требуемых запускаемых файлов прописаны в переменной окружения PATH, то все должно пройти без проблем, но этот процесс может занять сравнительно долгое время.

Процесс сборки состоит из нескольких этапов. Последовательно их выполним.

Первый шаг подготавливает файлы для будущей документации. Этот шаг требует наличия интернета. Во время его выполнения скрипт проверит, установлена ли у вас программа Doxygen для генерации документации, и если нет, то скачает ее в папку bin, а затем использует ее для генерации файлов документации.

python build.py dox

build_dox.png: 978x664, 33k (08.01.2023 12:35)

Следующий шаг сборки:

python build.py etg

Этот шаг на основе py-файлов из папки etg создает файлы для дальнейшей компиляции с помощью sip. Новые файлы создаются в папке sip\gen и имеют расширение .sip. Этот процесс уже чуть более долгий.

build_etg.png: 978x664, 68k (08.01.2023 12:43)

Затем запускаем компиляцию с помощью sip:

python build.py sip

build_sip.png: 978x664, 44k (08.01.2023 13:02)

И, наконец, запускаем непосредственно компиляцию.

python build.py build

build_build.png: 978x664, 68k (08.01.2023 13:44)

После удачного завершения компиляции бинарная сборка библиотеки будет располагаться в папке wx:

build_result.png: 1125x634, 87k (08.01.2023 13:51)

Сборка пакетов Python

К этому моменту основная часть уже выполнена. Осталось упаковать скомпилированную библиотеку в пакет, который можно будет установить с помощью pip. Для начала можно создать бинарный пакет с помощью команды

python build.py bdist

Эта операция не займет много времени.

build_bdist.png: 978x792, 71k (08.01.2023 13:55)

В результате ее выполнения будет создан файл wxPython-4.2.1-win32-py3.8.tar.gz (или с похожим именем в зависимости от того, какую версию wxPython вы собираете и под какой интерпретатор) в папке dist

А можно собрать пакет в формате wheel (что в последнее время является предпочтительным). Для сборки пакета в формате wheel нужно выполнить команду:

python build.py bdist_wheel

build_wheel.png: 978x584, 36k (08.01.2023 13:59)

После завершения этой операции в той же папке dist будет создан файл wxPython-4.2.1-cp38-cp38-win32.whl.

packages.png: 904x495, 38k (08.01.2023 14:02)

Проверка пакетов

Убедимся, что только что созданный wheel-пакет работает нормально. Для этого перейдем в папку dist с созданными пакетами и установим wheel-пакет с помощью pip:

cd dist
pip install wxPython-4.2.1-cp38-cp38-win32.whl

При необходимости pip скачает и установит требуемые зависимости (six, pillow, numpy).

pip_install.png: 978x552, 29k (08.01.2023 14:50)

Теперь запустим интерпретатор Python и убедимся, что модуль wx импортируется без ошибок:

python

>>> import wx
>>> wx.__version__
'4.2.1'

В результате должна быть выведена строка с номером версии wxPython.

import_wx.png: 978x552, 14k (08.01.2023 14:54)

Заключение

Вот, собственно, и все. После выполнения перечисленных шагов будет получен бинарный пакет, пригодный для установки с помощью pip, и при частой переустановке библиотеки на системах, для которых не подготовлены бинарные сборки авторами, не придется каждый раз долго ждать сборки и переживать по поводу результата компиляции.

В следующем разделе приведены ссылки на статьи по близким темам.

Похожие статьи

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
5 stars

Рейтинг 5.0/5. Всего 2 голос(а, ов)




Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 345