2013-04-03 10 views
6

Posiadam własny pakiet Pythona, który jest używany przez niezupełnie techniczną osobę w firmie. Ponieważ ich potrzeby (a raczej ich potrzeby) zmieniają się prawie codziennie, muszę dość często aktualizować bibliotekę i często tworzę dla nich nowe instalatory.Czy można aktualizować pakiet Python w locie?

Biblioteka zapewnia dostęp wysokiego poziomu do własnej niestandardowej bazy danych. W tym momencie wiem, że mogłem wysłać wersję lib wraz z zapytaniem, i pokazać użytkownikowi komunikat z wynikiem, że muszą zainstalować aktualizację.

Jednak wydaje się, że ci ludzie myślą, że zajęcie kilku sekund na kliknięcie pliku .exe i kliknięcie przycisków "next" na instalatorze trwa zbyt długo, zostanie wyświetlony monit o sprawdzenie, czy istnieje sposób automatycznej aktualizacji biblioteki podczas wykonywania wywołania "importuj X".

Nigdy nie spotkałem się z taką prośbą i myślę, że gdyby było to możliwe, większość popularnych bibliotek oferowałaby tę opcję. Ale myliłem się wcześniej i często. Czy ktoś wcześniej to zrobił?

+0

Widziałem to z powodzeniem w przeszłości, z dokładnie tych powodów, które opisują. Nie jest to trudne, ale nie mogę wymyślić rozwiązania out-box dla modułów Pythona. (+1) – NPE

+2

Nie rozumiem, dlaczego nie można pobrać wszystkich plików, skopiować ich na miejsce, a następnie wywołać 'reload()' na module ... Ale naprawdę nie sądzę, że to dobry pomysł. A co, jeśli pojawi się aktualizacja, która wszystko zepsuje? Ludzie nie byliby w stanie zapobiec uszkodzeniu ich systemów przez automatyczne uaktualnienie. Jeśli potrzebują tak szybkich aktualizacji, czy nie mogą pracować bezpośrednio z oddziału w repozytorium, którego używasz, zamiast używać instalatora? Wtedy mogą zatonąć, kiedy im się podoba. Albo oczywiście mogą być mniej leniwi. (^_^) – Cartroo

+1

@Cartroo: Nie sądzę, że złamanie to problem. W końcu uruchomienie instalatora może także wszystko zepsuć. –

Odpowiedz

2

Przepraszam, jeśli to tylko komentarz.
Ale jest kilka dostępnych opcji, które myślę. I muszę się zgodzić z Cartroo, funkcja reload() może być wystarczająca.

Istnieje świetny artykuł na stronie internetowej this (Charming Python: Reloading on the fly). Nie jestem do końca pewien, czy to jest dokładnie to, czego szukasz, ale przykład w tym artykule wydaje się dokładnie odpowiadać twoim potrzebom.

Niech malować scenariusz dla tego artykułu: Załóżmy, że chcemy uruchomić proces na lokalnym komputerze, ale część logiki programu mieszka gdzieś indziej. W szczególności załóżmy, że ta logika programu jest od czasu do czasu aktualizowana , a kiedy uruchomisz swój proces, będziesz lubisz używać najnowszej logiki programu. Istnieje szereg podejść do rozwiązania opisanego właśnie wymogu; ten artykuł przeprowadzi cię przez kilka z nich.

1

Mieć wywołanie "import X" uruchomić kod w bibliotece otoki. Kod czas importu sprawdzi bazę danych dla nowej wersji biblioteki i pobierze, jeśli uległa zmianie. Następnie może zaimportować pobraną bibliotekę lub zaimportować istniejącą bibliotekę. Mogą występować problemy z tym zamrożonym kodem, więc może być konieczne jawne przeanalizowanie nowego modułu.

Edytuj: To nie musi być wykonane w innym module. To może być po prostu wywołanie funkcji.

Powiązane problemy