Rekurencyjna wersja „przeładowania”

Kiedy tworzę kod Pythona, zwykle testuję go w tłumaczeniu ad hoc. Choryimport some_module, przetestuj go, znajdź błąd, napraw błąd i zapisz, a następnie użyj wbudowanegoreload funkcja doreload(some_module) i powtórz test.

Przypuśćmy jednak, że wsome_module mamimport some_other_modulei podczas testowaniasome_module Odkryłem błąd wsome_other_module i napraw to. Teraz dzwonięreload(some_module) nie będzie rekurencyjnie ponownie importowaćsome_other_module. Muszę albo ręcznie zaimportować zależność (wykonując coś podobnego)reload(some_module.some_other_module)lubimport some_other_module; reload(some_other_module)lub, jeśli zmieniłem całą masę zależności i straciłem kontrolę nad tym, co muszę przeładować, muszę zrestartować cały interpreter.

Co byłoby wygodniejsze, gdyby były jakieśrecursive_reload funkcja, a ja mógłbym to zrobićrecursive_reload(some_module) i mieć Pythona nie tylko przeładowaćsome_module, ale także rekursywnie przeładowuj każdy modułsome_module importuje (i każdy moduł, który importuje każdy z tych modułów itd.), dzięki czemu mógłbym być pewien, że nie używam starej wersji żadnego z pozostałych modułów, na którychsome_module zależy.

Nie sądzę, żeby w Pythonie było coś wbudowanego w to, co zachowuje się jak wrecursive_reload opisuję tutaj funkcję, ale czy istnieje łatwy sposób na włamanie się do czegoś takiego?

questionAnswers(7)

yourAnswerToTheQuestion