Как удаленно обновлять приложения Python - PullRequest
18 голосов
/ 03 августа 2011

Каков наилучший метод для внесения изменений в программу, написанную на Python?У меня есть часть программного обеспечения, написанная на Python, которая будет регулярно обновляться.Каков был бы лучший способ сделать это?Все машины будут иметь Windows 7.

Кроме того, извините за неоднозначность моего вопроса.Это будет мой первый раз, когда я буду внедрять процедуру обновления.Не стесняйтесь упоминать подробности, которые вы хотели бы, чтобы я добавил.

Ответы [ 2 ]

12 голосов
/ 04 августа 2011

Если вы еще не упаковываете свою программу с InnoSetup , я настоятельно рекомендую вам переключиться на нее, потому что она имеет средства, облегчающие подобные вещи. В сценарии InnoSetup вы можете указать любые особые ситуации, например, файлы, которые не следует обновлять, если они уже существуют (например, если у вас есть какие-либо внутренние файлы конфигурации или тому подобное).

Далее, чтобы позволить клиентскому компьютеру узнавать о новых версиях вашего приложения, сохраните очень маленький файл на общедоступном веб-сервере с номером версии текущего выпуска и URL-адресом установщика exe последней версии. Чтобы этот файл был полезен, всякий раз, когда вы выпускаете более новую версию вашей программы, вы должны обновить этот файл, а также номер версии в сценарии InnoSetup, а также некоторую константу APP_VERSION в вашей программе.

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

  1. Обнаружение, когда доступна более новая версия, путем получения файла текущей версии с вашего веб-сервера по HTTP и сравнения номера версии там с собственным APP_VERSION приложения. Удостоверьтесь, что этот запрос выполняется изящно, если клиентский компьютер не имеет доступа к Интернету и не блокирует графический интерфейс пользователя во время выполнения запроса (в случае возникновения проблемы в сети, которая заставляет запрос ждать долгое время для перерыва).
  2. Если доступна более новая версия, спросите пользователя, хотят ли они обновить, и если он скажет «да», загрузив обновленный установщик в каталог TEMP. В зависимости от того, какой инструментарий GUI вы используете, существуют различные механизмы для отображения диалога прогресса во время загрузки; это хорошая идея, поскольку установщик, вероятно, будет иметь размер не менее MB.
  3. Закрытие вашего приложения, запуск специального сценария обновления в фоновом режиме , затем повторный запуск приложения.

Сценарий обновления будет ожидать полного прекращения работы исходного процесса (самый простой способ сделать это - передать PID исходного процесса в качестве аргумента командной строки и заставить скрипт обновления отправить сигнал запроса 0 этому процессу каждую секунду или около того, пока он не исчезнет.) Затем он может запустить установщик в фоновом режиме, возможно, при отображении диалогового окна «Please Wait ...» для пользователя. После того, как установщик завершит работу и сообщит об успехе в своем коде возврата, программа обновления может перезапустить вашу программу.

В зависимости от того, насколько велико ваше приложение, пропускная способность будет расточительнее, чем метод с использованием git или другого SCM. Каждое обновление с этим подходом будет включать в себя загрузку всего установщика для последней версии приложения, в то время как SCM будет загружать только файлы, которые изменились. Однако его преимущество заключается в том, что он не требует специальных серверных средств, кроме обычного веб-сервера, и не требует специальной установки клиента SCM на компьютере пользователя.

Плюс, InnoSetup просто классный. : -)

7 голосов
/ 04 августа 2011

Я бы предложил использовать программу контроля версий, такую ​​как git или subversion.Кроме того, если вы согласны с тем, что все видят код, вы можете опубликовать код на github, где любой может его извлечь.Вы можете сделать его приватным, но вам придется заплатить за него, и все пользователи также должны будут создать учетную запись github и настроить его с помощью своей git install.

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

Просто для ясности, если выЕсли вы захотите это сделать, вам придется разместить код на сервере с поддержкой SSH и настроить git.Если вы не хотите проходить через все настройки сервера, я бы порекомендовал github.

git- http://git -scm.com / (Для версии Windows перейдите наЗагрузите и выберите msysGit)

github - https://github.com/

...