Нам дається випадок, коли ми хочемо оновити та протестувати модуль Python без перезапуску інтерпретатора. Це особливо корисно під час розробки, коли ви змінюєте файли модуля зовні й хочете, щоб ці зміни відобразилися негайно. Python дозволяє перезавантажувати попередньо імпортований модуль за допомогою функції reload(). Наприклад якщо ви редагували файл утиліти utils.py під час виконання сценарію, перезавантаження дозволяє повторно імпортувати оновлений вміст без перезапуску оболонки Python.
arraylist java sort
Коли потрібно перезавантажувати модуль?
- Під час налагодження або живого тестування
- При використанні інтерактивних інтерпретаторів, таких як IPython або Jupyter
- При розробці плагінів або модульних систем
- Для відображення змін, зроблених у зовнішніх файлах .py, без перезапуску сеансу
Перезавантаження модулів у Python 2.x
У Python 2.x ви можете безпосередньо використовувати вбудовану функцію reload() для перезавантаження модуля, який був раніше імпортований.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Пояснення:
- mymodule спочатку імпортується за допомогою import.
- Після внесення зовнішніх змін у mymodule.py виклик reload(mymodule) перезавантажує оновлену версію без перезапуску інтерпретатора.
- Немає необхідності повторно імпортувати — reload() працює з уже імпортованим об’єктом модуля.
Перезавантаження модулів у Python 3.0 до 3.3
У версіях Python від 3.0 до 3.3 вбудовану функцію reload() було видалено. Натомість вам потрібно імпортувати його з модуля imp.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Пояснення:
- Спочатку mymodule імпортується як зазвичай.
- Модуль imp забезпечує функцію reload() протягом цього діапазону версій.
- Після редагування mymodule.py imp.reload(mymodule) перезавантажує модуль із оновленими змінами.
Примітка. Модуль imp застарів із Python 3.4 і замінений на importlib.
Перезавантаження модулів у Python 3.4 і вище
Починаючи з Python 3.4, рекомендованим способом перезавантаження модуля є використання importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Пояснення:
numpy linspace
- mymodule спочатку імпортується нормально.
- Потім importlib.reload(mymodule) перезавантажує оновлений модуль.
- Це поточний і офіційний спосіб перезавантаження модулів у Python 3.4+.
Примітка. Використовуйте цей метод у всіх сучасних сценаріях і блокнотах Python під час тестування змін модуля.
Чи можете ви вивантажити модуль у Python?
Наразі Python не надає вбудованого способу повного вивантаження модуля після його імпорту. Після завантаження модуля в пам’ять він залишається доступним у sys.modules до завершення програми. Хоча ви можете видалити модуль із sys.modules, це не гарантує його повне видалення з пам’яті чи зникнення посилань на нього:
операційна система linuxPython
import mymodule import sys del sys.modules['mymodule']
Це призведе лише до видалення модуля з кешу sys.modules. Якщо будь-яка змінна чи об’єкт все ще посилається на модуль, він не буде повністю вивантажений.
Чому вивантаження не підтримується?
- Python глобально керує модулями в пам’яті.
- Динамічне вивантаження може призвести до непослідовної поведінки, якщо частини вашого коду все ще містять посилання на старий модуль.