Обновление вашего приложения с помощью Esky — wxPython #48

В проект wxPython, начиная с версии 2.9 была добавлена возможность обновлять ваши приложения с помощью новой библиотеки, которая называется wx.lib.softwareupdate. Возможность обновлять программное обеспечение была реализована посредством смешанного класса, использующего пакет Esky. Насколько мне известно, данная технология позволяет проводить только запрашиваемые обновления и не работает в фоновом режиме.

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

Если у вас не установлена Esky, то вы можете сделать это посредством pip

В зависимости от того, какой платформой вы пользуетесь, вам также может понадобиться загрузка пакета двоичного программирования. Например, если вы пользуете Windows, вам понадобится py2exe, в случае использования Macpy2app. Мы будем создавать простое средство просмотра фотографий, в которое мы затем добавим обновление. В данной статье мы работаем на Windows, но на Mac процесс не должен отличаться. Вы можете использовать pip для установки py2exe и py2app.

Нам также понадобится иерархия папок, которая должна будет выглядеть примерно так:

Теперь вам нужно создать начальную версию программного обеспечения и сохранить её в папке image_viewer0.0.1.

Добавление кода обновления в начальный релиз

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

Для активации обновления программного обеспечения, нам нужно импортировать класс SoftwareUpdate из wx.lib.softwareupdate. Теперь нам нужно создать подкласс для обеих wx.App и SoftwareUpdate, так как SoftwareUpdate является смешанным классом.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Затем в конструкторе __init__ нам нужно вызвать InitUpdates с помощью URL по нашему выбору плюс та URL, которая связана с ChangeLog.txt. Мы настраиваем отображение названия приложения и, наконец, вызываем CheckForUpdate. Вот и всё. Теперь нам нужно запаковать всё это в исполняемый файл.

Вам нужно будет создать скрипт setup.py, в котором будет код, размещённый ниже, и поместить его в ту же директорию, где лежит начальный скрипт релиза.

Вам также понадобиться файл version.py, в котором будет следующее:

Теперь вы действительно готовы к созданию исполнительного файла. Откройте терминал (cmd.exe в Windows), и укажите папку, куда вы поместили все эти файлы. Вам также стоит положить в папку несколько иконок, которые вы сможете найти в хранилище кода книги (для более детальной информации ознакомьтесь с введением).

Вам это нужно, так как скрипт setup.py написан таким образом, что будет искать иконки. Окей, теперь нам нужно создать дистрибутив. Впечатайте следующие строки в ваш терминал:

Эта команда предполагает, что в вашем пути файла есть Python. Если же нет, вам нужно будет добавить или просто изменить полный путь к Python. Как только вы запустите эту команду, вы увидите целую кипу исходящих данных. Если всё пройдёт нормально, в конце у вас будет две папки build и dist. Нас не особо интересует первая из них. Во второй папке должен быть лишь один файл, который называется как-то так: wxImageViewer-0.0.1.win32.zip

Подготовка нового релиза

Вашим пользователям нравится, когда приложении появляются новые возможности. Начальная версия нашей программы позволял только использовать проводник для поиска необходимого файла. Давайте добавим несколько новых опций в ваше приложение:

  • Кнопки «Вперёд» и «Назад», чтобы вы могли перемещаться между файлами в папке.
  • Возможность запуска «Слайд-шоу».

Так как это будет новый релиз, создайте в Python новый скрипт с таким же названием, как и у первоначального, а затем сохраните его в папке image_viewer0.1.0, созданной нами ранее.’

Для того, чтобы всё было крайне просто – скопируйте код, который вы найдёте ниже, в ваш скрипт. Или же вы можете взять первоначальную версию кода и обновлять её в процессе. Я оставлю это решение за вами. Следующий сниппет достаточно длинный, так что я разобью его на несколько логических блоков, чтобы мне было проще вам всё объяснить.

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

Здесь мы создали подкласс из wx.Frame. Мы добавили простую панель инструментов, позволяющую открыть папку с изображениями. Кроме указанных функций, данный класс больше ничего не делает. Как бы то ни было, вы можете расширить функциональность посредством добавления панели состояния или меню.

Последним классом здесь является SoftwareUpdate смешанный с wx.App. Он также подтверждает класс фрейма. Это довольно прямолинейны класс, так что в будущем вам не удастся с ним взаимодействовать.

Теперь нам нужно взглянуть на новую версию setup.py, так как она немного отличается.

Этот второй скрипт использует пабсаб из wxPython. В любом случае, py2exe самостоятельно этого не узнает, так что вам нужно указать ей на точное расположение пабсаб файлов, требующих захвата.

Не забудьте убедиться в том, что ваша версия файла version.py имеет более высокое релизное значение, чем оригинальный файл, иначе обновление не удастся. Вот какое я указал в своём приложении:

Теперь нам нужно повторить тот же фокус с командной строкой, за исключением того, что в этой раз мы проделываем его с обновлённой директорией релиза.

Скопируйте zip-файл в вашу папку downloads. Теперь нам нужно разместить эти файлы на localhost вашего компьютера. Чтобы сделать это войдите в вашу папку с загрузками посредством командной строки и запустите следующую команду:

Теперь Python запустит небольшой HTTP-сервер, на котором размещены эти файлы. Если вы вставите в адресную строку вашего браузера http://127.0.0.1:8000 и перейдёте по этой ссылке, вы увидите это своими глазами. Теперь вы готовы к процессу обновления!

Обновление программы

Убедитесь в том, что вы разархивировали первоначальную версию вашего средства для просмотра изображений в какую-то из папок вашего компьютера. Затем запустите файл, который называется image_viewer.exe. Если всё идёт по плану, вы увидите следующее окно:

Обновление вашего приложения с помощью Esky - wxPython #48

Продолжите, согласитесь на обновление, и программа попросит вас перезапустить приложение:

Обновление вашего приложения с помощью Esky - wxPython #48

После того, как оно перезапустится, у вас появится новый интерфейс средства для просмотра изображений. Я заметил, что, когда я закрываю приложение, я получаю ошибку, которая оказалась предупреждением об использовании устаревшего программного обеспечения. Вы можете его проигнорировать, но, если вы всё-таки хотите что-то сделать – импортируйте модуль предупреждений и усмирите его.

Итоги

Сейчас вы уже должны быть готовы к тому, чтобы играть по-крупному. Вы также можете использовать AutoCheckForUpdate вместо CheckForUpdate, указав определённый промежуток между уведомлениями, чтобы они не выскакивали каждый раз, когда вы будете запускать программу.

Или, если вы хотите просто разместить функцию CheckForUpdate в хэндлер событий, использующий тригеры. Множество приложений так и делают, позволяя пользователю найти в меню пункт «Проверка обновлений». Используйте вашу навигацию и начинайте хакать! Существует также конкурент Esky, который называется goodasnew, так что вы можете использовать и его. Пока что он не интегрирован в wxPython, но кто знает, что может случиться в будущем.