Mamy przypadek, w którym chcemy zaktualizować i przetestować moduł Pythona bez ponownego uruchamiania interpretera. Jest to szczególnie przydatne podczas programowania, gdy modyfikujesz pliki modułów zewnętrznie i chcesz, aby te zmiany zostały natychmiast odzwierciedlone. Python pozwala nam ponownie załadować wcześniej zaimportowany moduł za pomocą funkcji reload(). Na przykład jeśli edytowałeś plik narzędzia utils.py podczas działania skryptu, ponowne załadowanie pozwala na ponowne zaimportowanie zaktualizowanej zawartości bez ponownego uruchamiania powłoki Pythona.
Kiedy należy ponownie załadować moduł?
- Podczas debugowania lub testowania na żywo
- Podczas korzystania z interaktywnych interpreterów, takich jak IPython lub Jupyter
- Podczas tworzenia wtyczek lub systemów modułowych
- Aby odzwierciedlić zmiany wprowadzone w zewnętrznych plikach .py bez ponownego uruchamiania sesji
Ponowne ładowanie modułów w Pythonie 2.x
W Pythonie 2.x możesz bezpośrednio użyć wbudowanej funkcji reload() do ponownego załadowania modułu, który został wcześniej zaimportowany.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Wyjaśnienie:
- mymodule jest najpierw importowany za pomocą importu.
- Po dokonaniu zewnętrznych zmian w mymodule.py wywołanie reload(mymodule) powoduje ponowne załadowanie zaktualizowanej wersji bez ponownego uruchamiania interpretera.
- Nie ma potrzeby ponownego importowania — reload() działa na już zaimportowanym obiekcie modułu.
Ponowne ładowanie modułów w Pythonie 3.0 do 3.3
W wersjach Pythona od 3.0 do 3.3 wbudowana funkcja reload() została usunięta. Zamiast tego musisz zaimportować go z modułu imp.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Wyjaśnienie:
ile tygodni w miesiącu
- Pierwszy moduł mymodule jest importowany w zwykły sposób.
- Moduł imp udostępnia funkcję reload() w tym zakresie wersji.
- Po edycji mymodule.py imp.reload(mymodule) ponownie ładuje moduł ze zaktualizowanymi zmianami.
Uwaga: moduł imp jest przestarzały od wersji Python 3.4 i został zastąpiony przez importlib.
Ponowne ładowanie modułów w Pythonie 3.4 i nowszych
Począwszy od wersji Python 3.4 zalecanym sposobem ponownego załadowania modułu jest użycie importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Wyjaśnienie:
- mymodule jest najpierw importowany normalnie.
- Następnie importlib.reload(mymodule) ponownie ładuje zaktualizowany moduł.
- To jest aktualny i oficjalny sposób przeładowywania modułów w Pythonie 3.4+.
Uwaga: Podczas testowania zmian modułów należy używać tej metody we wszystkich nowoczesnych skryptach i notatnikach języka Python.
Czy możesz rozładować moduł w Pythonie?
Obecnie Python nie zapewnia wbudowanego sposobu pełnego zwolnienia modułu po jego zaimportowaniu. Gdy moduł zostanie załadowany do pamięci, pozostaje on dostępny w sys.modules aż do zakończenia programu. Chociaż możesz usunąć moduł z sys.modules, nie gwarantuje to jego całkowitego usunięcia z pamięci lub zniknięcia jego odniesień:
Pythonimport mymodule import sys del sys.modules['mymodule']
Spowoduje to jedynie usunięcie modułu z pamięci podręcznej sys.modules. Jeśli jakakolwiek zmienna lub obiekt nadal odwołuje się do modułu, nie zostanie całkowicie wyładowany.
w celu
Dlaczego rozładunek nie jest obsługiwany?
- Python zarządza modułami globalnie w pamięci.
- Dynamiczne zwalnianie może prowadzić do niespójnego zachowania, jeśli części kodu nadal zawierają odniesienia do starego modułu.