Как удаленно обновлять приложения Python

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

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

Ответы

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

github - https://github.com/