Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Автообновление Python как сделать?

бул ербул Ученик (79), закрыт 6 месяцев назад
Подскажите как сделать автообновление приватного кода (компилированного в .exe) наакрытых репозиториях, либо облаках, как можно сделать к примеру если есть версия 1.1.exe, проверяющая наличие новых версий в папке облака, если там такая же версия, то автообновление пропускалось, код продолжал свою работу, если в облаке версия 1.2.exe то скачивалась новая, прошлая удалялась
Лучший ответ
olimchik Мастер (1233) 6 месяцев назад
нужно будет написать код, который будет:

1. Проверять наличие новой версии приложения в облаке.
2. Скачивать новую версию, если она доступна.
3. Заменять старую версию на новую.

Для примера будем использовать облако Google Drive и библиотеку requests для скачивания файла. Также потребуется библиотека shutil для работы с файлами. Ниже приведен пример кода:

1. Скрипт для проверки и скачивания обновлений:
 import requests 
import os
import shutil
import sys

# URL файла с текущей версией приложения
VERSION_URL = 'https://your-cloud-link/version.txt' # Замените на URL файла с текущей версией
EXE_URL = 'https://your-cloud-link/new_version.exe' # Замените на URL новой версии .exe

CURRENT_VERSION = '1.1' # Текущая версия вашего приложения

def check_for_update():
try:
response = requests.get(VERSION_URL)
response.raise_for_status()
latest_version = response.text.strip()

if latest_version > CURRENT_VERSION:
return True, latest_version
else:
return False, latest_version
except requests.RequestException as e:
print(f"Ошибка при проверке обновлений: {e}")
return False, CURRENT_VERSION

def download_update(latest_version):
try:
response = requests.get(EXE_URL, stream=True)
response.raise_for_status()

new_file = f"your_app_{latest_version}.exe"

with open(new_file, 'wb') as file:
shutil.copyfileobj(response.raw, file)

return new_file
except requests.RequestException as e:
print(f"Ошибка при скачивании обновлений: {e}")
return None

def replace_old_version(new_file):
current_file = sys.argv[0]
try:
os.remove(current_file)
shutil.move(new_file, current_file)
print("Обновление успешно установлено.")
except OSError as e:
print(f"Ошибка при замене старой версии: {e}")

if __name__ == "__main__":
update_available, latest_version = check_for_update()

if update_available:
print(f"Доступна новая версия: {latest_version}. Обновление...")
new_file = download_update(latest_version)

if new_file:
replace_old_version(new_file)
else:
print("У вас уже установлена последняя версия.")
2. Файл с текущей версией:

Создайте файл version.txt на облаке с текстом, содержащим последнюю версию, например:
 1.2 
3. Запуск обновления:

Запустите этот скрипт при старте вашего основного приложения. Скрипт проверит, есть ли новая версия, скачает и заменит старую версию, если обнаружит обновление.

Примечания:

• Для скачивания файла из Google Drive может потребоваться использование API или создание прямой ссылки на файл. Убедитесь, что у вас есть правильные права доступа.
• Этот пример предполагает, что новая версия будет загружена в том же каталоге, где находится старая версия.
• После замены старой версии, вы можете перезапустить приложение автоматически с помощью библиотеки subprocess.
 import subprocess 

def restart_program():
try:
subprocess.Popen([sys.executable] + sys.argv)
sys.exit()
except Exception as e:
print(f"Ошибка при перезапуске программы: {e}")
Вызовите функцию restart_program() после замены старой версии на новую.

Эти шаги обеспечат автоматическое обновление вашего приложения, когда новая версия будет доступна в облаке.
Остальные ответы
a1987zz Мудрец (13225) 6 месяцев назад
через библиотеки может PyUpdater.
Похожие вопросы