OutWiker 5.0.0.984 alpha 1 — Переход на Python 3.14

OutWiker 5.0.0.984 alpha 1 - Переход на Python 3.14

После релиза OutWiker 4.1 я полностью сосредоточился на разработке следующей крупной версии — 5.0. О сроках нового релиза я пока еще не думаю, но очень надеюсь, что он будет меньше, чем через год. За последний месяц довольно продуктивно удалось поработать над пока еще зародышем этой версии. И хотя новых возможностей для пользователей в этой версии почти не появилось, внутри приложения многое поменялось. Про эти внутренние изменения я и буду дальше рассказывать в этом посте.

Главной целью этой итерации разработки было перейти с Python 3.8 хотя бы на Python 3.12, а вместе с этим обновить множество библиотек, которые раньше я не мог обновить из-за устаревшей версии Python.

Изначально я ориентировался именно на Python 3.12, а не на более новые версии по двум причинам. В первую очередь из-за библиотеки для проверки орфографии, которую я использую — chunspell. Когда я смотрел ее обновления в прошлый раз, она еще не поддерживала Python 3.13 и выше, и из исходников с ходу мне ее не удалось собрать под более новые версии Python, требовалось изменение кода на языке Cython, с помощью которого библиотека создает обертку над библиотекой hunspell. И, во-вторых, предыдущая версия OutWiker 4.1 точно работает на Python 3.12, и именно с этими версиями приложение упаковано в сборки для Linux.

Честно говоря, я был уже морально готов начинать ковырять код chunspell с непредсказуемым результатом, чтобы запустить эту библиотеку на более новых версиях Python, но тут случилось страшное приятное. Эта библиотека внезапно обновилась в начале сентября, и у нее появилась поддержка вплоть до Python 3.15. Одна проблема решилась сама собой.

Почти одновременно с этим, в конце июля, вышла новая версия библиотеки wxPython (с номером 3.4.1), на основе которой строится интерфейс OutWiker. Значит, wxPython тоже сразу обновляем. Но обновление wxPython почти никогда не проходит бесследно гладко, все время что-то ломается. В этот раз сломались две вещи. Сломался класс, который размещает панели инструментов в несколько строк, если они не умещаются в одну. И кнопки с картинками стали себя странно вести — они начали ужиматься до размера картинок и стали очень уж мелкими. Но эти проблемы не были критичными, пришлось повозиться несколько вечеров, но с помощью костылей все вернул, как было.

Пока я копался с миграцией на wxPython 4.3.1, внезапно вышло еще одно обновление wxPython до версии 4.3.2. Разумеется, я попробовал сразу же на нее перейти. Но эта версия оказалась какой-то странной. Первой особенностью, которая мне не понравилась, стало добавление библиотеки Numpy в зависимости. Я довольно щепетильно отношусь к появлению лишних библиотек в сборке, когда-то wxPython уже тянул за собой Numpy, а потом от него избавились, но, кажется, иногда они возвращаются. Хотя это было не самое страшное. Хуже оказалось то, что после обновления сломался диалог настроек. Половина разделов просто перестали отображаться. Расследование вышло на проблему с настройками прокрутки, причем похоже, что проблема идет из библиотеки wxWidgets, поверх которой работает wxPython. После этого я решил, что, пожалуй, пропущу эту версию и откатился обратно к wxPython 4.3.1. А сейчас, когда писал этот пост, залез на PyPi — репозиторий пакетов для Python, посмотреть, не вышла ли очередная версия с исправлениями, а там напротив версии 4.3.2 стоит загадочная предупреждающая надпись «Incomplete provenance: 28 of 30 files were uploaded without provenance metadata.», что конкретно случилось, я уже разбираться не стал. В любом случае буду ждать следующие версии.

Теперь, когда самые проблемные библиотеки обновлены, остался последний шаг к переходу на Python 3.12 и выше. Теперь все это надо собрать в приложение для Windows (линуксовые версии, как я уже говорил, и раньше работали на Python 3.12). Для создания запускаемого файла .exe я использую cx_Freeze довольно старой версии, последнюю, которая еще работала с Python 3.8. С тех пор вышло довольно большое количество новых версий, но главная проблема в том, что изменился формат взаимодействия с этой библиотекой. Когда-то я писал большую статью про cx_Freeze, теперь она сильно устарела, надо бы ее переписать. Я сейчас не буду вдаваться в подробности сборки с помощью этой библиотеки, скажу лишь, что ИИ очень хорошо справился с переписыванием класса, который отвечает за сборку приложения.

После обновления cx_Freeze я попробовал с помощью нее собрать еще двоичную сборку под Linux, и она вроде бы даже работает. Но я ее пока не выкладываю, ее надо еще сделать более аккуратной и получше потестировать в разных Линуксах. Если все удачно сложится, то это будет еще один шаг к созданию пакета в формате AppImage или двоичного deb-пакета.

Затем обновил оставшиеся библиотеки, переход на новые версии которых обычно не вызывает проблем. Из мелочей тут можно отметить, что при переходе на новую версию Pygments, библиотеки, которая отвечает за раскраску кода в плагине Source, пришлось немного поправить тесты, но там были простые оформительские изменения.

При переходе на новую версию Pyparsing старые имена функций стали помечаться, как устаревшие, надо было их заменить на новые, которые делают то же самое, но имеют более традиционное для Python написание. Это изменение свелось к поиску и простой замене текста, которое я делал с помощью sed. Правда, на совсем последнюю версию Pyparsing я пока переходить не стал, остановился на одной из промежуточных версий. Дело в том, что последние версии стали тянуть за собой модуль unittest. предназначенный для написания тестов, а я стараюсь, чтобы в сборку OutWiker не попадали лишние пакеты, которые нужны только разработчикам. Конечно, unittest — довольно компактный модуль, но с обновлением пока решил подождать, вдруг автор Pyparsing одумается и отделит код тестов от основного кода.

После того, как я обновил все эти и другие библиотеки, возникло желание проапгрейдится дальше и ориентироваться уже на Python 3.14, а может быть и 3.15, который вышел месяц назад. В принципе, теперь особых препятствий к этому я не вижу. Версия под Windows замечательно собирается под Python 3.14. Думаю, что при желании можно собрать и под Python 3.15, но для wxPython 4.3.1 нет бинарных сборок под Windows с Python 3.15 и ее надо собирать из исходников. Такая сборка уже есть для wxPython 4.3.2, но, как я говорил, на эту версию я переходить не стал.

Что касается сборок под Linux, то для текущей версии Flatpak SDK интерпретатор Python 3.14 — это родная версия Python. Раньше для использования Python 3.12 приходилось его компилировать из исходников и добавлять в пакет, теперь этот костыль тоже выбросил. Благодаря этому flatpak-пакет OutWiker уменьшился чуть ли не втрое.

В результате Python 3.12 сейчас остался только в snap-пакете под Linux, и то только из-за того, что до него просто не дошли руки. Скорее всего к следующей версии там тоже будет Python 3.14.

До сих пор я рассказывал про то, что было сделано для сборки приложения, на это, на самом деле, и ушла большая часть времени. Я уже давно заметил, что мне нравится копаться в коде, который связан со сборками приложений, даже если пользователям от этого ни горячо, ни холодно. Что же касается боле езаметных изменений, то здесь успехи пока более скромные. Продолжаю обрабатывать напильником код, связанный с HTML-рендером Edge под Windows. По сравнению с прошлой, нулевой, альфа-версией исправил предпросмотр формул для плагина TeXEquation, а заодно обновил библиотеку KaTeX, которая занимается отображением формул. Одновременно с этим исправилось отображение информации об установленных плагинах в диалоге настроек. Улучшил выделение сломанных ссылок на заметки на вики-страницах. Добавил настройку для установки цвета выделенного текста в редакторе. Вроде бы все.

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

На этом пока все, последнюю альфа-бета-версии OutWiker, как обычно, можно скачать на этой странице. Жду вашей обратной связи по поводу этой новой версии.

Подписывайтесь на OutWiker в социальных сетях и ставьте звездочки проекту на GtHub:

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

Пожалуйста, оцените запись

(Количество голосов: 2, средняя оценка: 5,00)

Leave a comment