Я сделал авто-обновление вот так:
[Нужно ли обновление? | check_update?version=version] Запрос на сайт => да/нет
Если да:
[get_updates] Запрос на сайт => list({"version": "1.0.1", "url": "..."}, {"version": "1.1", "url": "..."})
Тут скрипт выбирает последний элемент через list[-1]
Там уже закачка файла по ссылка.
Как файл скачается, скрипт удалит себя, но тот что скачал, он переименовывает как себя (старое название) и перезапускается с флагом --updated
Если есть флаг, он выводит, что обновление успешно установлено.