2013-12-16 4 views
13

У меня есть настольное приложение, над которым я работаю, и я использую PyInstaller для создания файлов распространения.Автоматическое обновление исполняемого файла python, сгенерированного с помощью pyinstaller

Я выбрал PyInstaller над py2exe, потому что она очень проста в использовании и не нужно заботиться о Windows DLLs, но когда я использую py2exe я могу просто использовать Esky к обновляться автоматически, но я не могу использовать его с PyInstaller.

Так что я не знаю, как запустить приложение для автоматического обновления. У кого-то есть некоторые мысли или просто знаю, как я могу использовать PyInstaller и esky?

+2

Почему бы не просто создать .bat файл, планировать его в окна планировщика для запуска при каждой загрузке/выключения/час или около того? – Torxed

+0

@Torxed, Имейте в виду, что вы должны запускать его как 'SYSTEM', иначе появится подсказка. –

+0

Вы также можете запустить его в пользовательском пространстве и заставить приглашение скрываться, но да, будет приглашение. Вы также можете создать скрипт службы Python из ~ 20 строк, запустите команду «Pyinstaller» и установите ее с помощью «C:> python myservice.py install» – Torxed

ответ

5

Вы можете создать приложение запуска для своего основного приложения и добавить туда всю логику обновления. Запуск приложения выполняют следующие действия:

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

Проверяет локальные и хранилище версий

если локальный < удаленного (скажем, v1.0 < v2.0) then:

.... Проверьте в удаленном репозитории наличие приложения-обновления updater_v2.0.exe.

........ Если есть один: скачайте его, запустите его и выйдите. (см. ниже)

........ Если нет: загрузите последнее основное приложение exe и замените локальный (остерегайтесь прав доступа к файлу на этом шаге - вы пытаетесь написать c: \ program files).

если локальный> удаленный затем:

.... дисплей сообщение об ошибке/предупреждение кроме если это рабочая станция разработчиков (вам нужна настройка для этого)

Запуск основного приложения.

Цель приложения-аппликатора заключается в том, чтобы приспособить случаи, когда выборки нового основного приложения exe недостаточно. Я также использую его для обновления самого приложения запуска (именно поэтому запускающая программа выходит, как только она запускает программу обновления - BTW дает окна немного времени, прежде чем пытаться перезаписать исполняемый файл laucher)

5

Я столкнулся с тот же вопрос некоторое время назад - поэтому я написал небольшую библиотеку (updater4pyi), чтобы сделать именно это на Mac OS X, Linux и Windows. Вы можете получить его от PyPI, например, с

> pip install updater4pyi 

Источником хранилище находится по адресу: https://github.com/phfaist/updater4pyi.

Это небольшой и не очень зрелый проект. Он должен быть максимально гибким, не полагаясь, например, на какой-либо конкретный набор инструментов gui. Я проверил некоторые тесты на разных платформах, но могут быть ошибки. Надеюсь, это может быть полезно и для кого-то другого.

+0

Ничего себе, я рад, что вы это сделали, я попробую скоро! –

+1

Обратите внимание, что updater4pyi НЕ работает с Python 3. – James

0

На сегодняшний день pyinstaller имеет только экспериментальную поддержку python3. Если кто-то хочет использовать esky, я бы порекомендовал использовать cx freeze.Он поддерживает python 2 и 3 и работает на linux mac и windows

Затем вы можете использовать esky. Преимущество Esky состоит в том, что вы работаете с механизмом бутстрапа, чтобы у вас всегда была установлена ​​хотя бы одна исполняемая версия.

+0

Я использовал Esky с замораживанием cx, и они отлично работают вместе. –

Смежные вопросы