Следующий код, расширенный с помощью time.sleep(10)
, не вызывает ошибку утверждения (безопасный порог составляет одну секунду). Это дает объяснение, почему перезагрузка не работает должным образом. Таким образом, ответ на вопрос, почему возникает ошибка утверждения, это
blockquote>
importlib.reload()
использует временную метку файла, чтобы решить о повторной компиляции кэшированного файла.Если обновление / изменение кода происходит очень быстро, кешированный и файл сценария считаются одной и той же версией, и не происходит повторной компиляции кэшированных файлов, из которых модули повторно загружаются.
import os import sys import tempfile import importlib import time # Create some module and import it dir = tempfile.TemporaryDirectory() os.mkdir(os.path.join(dir.name, 'test_package')) with open(os.path.join(dir.name, '__init__.py'), "w") as f: f.write("\n") with open(os.path.join(dir.name, 'test_package', 'some_module.py'), "w") as f: f.write("def a():\n print(\"old\")\n return 0\n") sys.path.insert(0, dir.name) from test_package import some_module # Check that imported code works as expected assert some_module.a() == 0
blockquote>time.sleep(10)
# Alter module and reload with open(os.path.join(dir.name, 'test_package', 'some_module.py'), "w") as f: f.write("def a():\n print(\"new\")\n return 1\n") importlib.reload(some_module) # Check wether modifications have been reloaded assert some_module.a() == 1 sys.path.pop(0)