2011-08-03 30 views
15

Jaka jest najlepsza metoda przesyłania zmian do programu napisanego w Pythonie? Mam oprogramowanie napisane w Pythonie, które będzie regularnie aktualizowane. Jaki byłby najlepszy sposób na zrobienie tego? Wszystkie komputery będą miały Windows 7.Jak zdalnie aktualizować aplikacje Python

Wyjaśnij także dwuznaczność mojego pytania. To będzie mój pierwszy raz, kiedy będę musiał przeprowadzić procedurę aktualizacji. Zapraszam do wymieniania szczegółów, które chciałbyś dodać.

+2

czy aktualnie pakujesz swoją aplikację do instalacji/dystrybucji? Czy to tylko plik skryptu? Czy kod aplikacji wymaga aktualizacji lub po prostu mówisz o pobieraniu aktualizacji danych z Internetu? –

Odpowiedz

7

Proponuję użyć programu sterującego źródłem, takiego jak git lub subversion. Ponadto, jeśli wszystko jest w porządku, gdy wszyscy widzą kod, możesz opublikować kod na github, gdzie każdy może go pobrać. Możesz uczynić to prywatnym, ale musiałbyś za to zapłacić, a wszyscy użytkownicy również utworzyli konto Github i skonfigurowali je z instalacją git.

Jeśli korzystasz z programu sterującego źródłami, inne osoby będą musiały ręcznie wprowadzić zmiany, uruchamiając polecenie, ale możesz utworzyć plik wsadowy skryptu, który to zrobi i będzie uruchamiany podczas uruchamiania lub w regularnych odstępach czasu .

Dla jasności, jeśli chcesz to zrobić, będziesz musiał umieścić kod na serwerze z obsługą SSH i konfiguracją git. Jeśli nie chcesz przechodzić przez wszystkie ustawienia serwera, polecam github.

git- http://git-scm.com/ (dla wersji systemu Windows, przejdź do pobrania i wybierz msysgit)

GitHub - https://github.com/

+0

Neil jest tutaj sprytny. Mercurial i git będą dobrymi opcjami i możesz łatwo napisać krótki skrypt "auto-update", który będzie wywoływany co X dni i po prostu ściąga najnowszą wersję repo. – Jonathanb

9

Jeśli nie masz już opakowania swój program z InnoSetup, gorąco polecamy przełączyć się do niego, ponieważ ma ułatwienia w ułatwianiu tego typu rzeczy. Możesz określić dowolne specjalne sytuacje, takie jak pliki, które nie powinny być aktualizowane, jeśli już istnieją (tj. Jeśli masz jakieś wewnętrzne pliki konfiguracyjne lub podobne rzeczy), w skrypcie InnoSetup.

Następnie, aby umożliwić komputerowi klienta uzyskanie informacji o nowych wersjach aplikacji, należy zachować bardzo mały plik na publicznym serwerze sieciowym, który ma numer wersji bieżącej wersji i adres URL do instalatora najnowszej wersji exe. Aby ten plik był przydatny, za każdym razem, gdy wydajesz nowszą wersję swojego programu, musisz zaktualizować ten plik, jak również numer wersji w skrypcie InnoSetup, a także pewną stałą APP_VERSION w twoim programie.

Potem trzeba obsłużyć te części Updater siebie:

  1. Wykrywanie gdy nowsza wersja jest dostępna pobierając plik obecna wersja z serwera WWW za pomocą protokołu HTTP i porównując wersję tam numer do aplikacji APP_VERSION. Upewnij się, że robisz to zapytanie w sposób, który kończy się niepowodzeniem, jeśli komputer klienta nie ma dostępu do Internetu, i który nie blokuje GUI podczas wykonywania żądania (w przypadku, gdy istnieje problem z siecią, który zmusza zapytanie do oczekiwania długi czas na timeout).
  2. Jeśli dostępna jest nowsza wersja, użytkownik pyta, czy chce ją zaktualizować, a jeśli tak, to znaczy, pobiera zaktualizowany instalator do katalogu TEMP. W zależności od tego, jakiego zestawu narzędzi GUI używasz, istnieją różne mechanizmy wyświetlania okna dialogowego postępu podczas pobierania; jest to dobry pomysł, ponieważ instalator prawdopodobnie będzie miał co najmniej MB.
  3. Zamknięcie aplikacji, uruchomienie specjalnego skryptu aktualizacyjnego in the background, a następnie ponowne uruchomienie aplikacji.

Skrypt aktualizacja będzie czekać na oryginalnym procesie całkowicie die (najprostszym sposobem, aby to zrobić, to przekazać w sposób pierwotny PID jako argument wiersza polecenia i mieć skrypt aktualizacji send a query signal 0 to that process co sekundę lub tak, dopóki nie idzie away). Następnie może uruchomić program po cichu w tle, być może wyświetlając użytkownikowi okno dialogowe "Proszę czekać ...". Po zakończeniu instalacji i zgłoszeniu powodzenia w kodzie powrotu program aktualizujący może ponownie uruchomić program.

W zależności od tego, jak duża jest twoja aplikacja, jest to bardziej marnujące przepustowość niż metoda używająca git lub innego SCM. Każda aktualizacja z takim podejściem wymagałaby pobrania całego instalatora dla najnowszej wersji aplikacji, podczas gdy SCM pobierałby tylko pliki, które uległy zmianie. Ma jednak tę zaletę, że nie wymaga specjalnych urządzeń serwerowych, z wyjątkiem zwykłego serwera WWW, i nie wymaga specjalnej instalacji klienta SCM na komputerze użytkownika.

Plus, InnoSetup jest po prostu fajny. :-)

+0

Innym, technicznym sposobem na sprawdzenie, czy twoja istniejąca aplikacja jest nadal otwarta, jest sprawdzenie, czy aplikacja pobiera blokadę odczytu w pliku tymczasowym o wstępnie określonej nazwie, gdy jest uruchomiona. Jest to fajne, ponieważ pozwala uniknąć mało prawdopodobnego, ale możliwego scenariusza sytuacji wyścigowej, w którym aplikacja zwalnia swój PID, ale inna nowa aplikacja natychmiast otrzymuje ten sam PID. Zapobiegnie to również uruchomieniu przez użytkownika wielu wystąpień aplikacji, co może wprowadzić w błąd aktualizator. – DSimon