Есть ли в любом случае, чтобы очистить кеш байтона Python?
Вопрос
Каждый модульный тест, который я запускаю, - это писать код Python в файл, а затем импортировать его в качестве модуля. Проблема в том, что код изменяется, но дальнейшие операторы импорта не изменяют модуль.
Я думаю, что мне нужен способ, чтобы эфир заставил перезагрузить модуль или очистить внутренний кэш байт -кодов. Любые идеи?
Спасибо!
Решение
Модули ReimPorting сложно правильно понять все края. Документация для перезагрузить упоминает некоторые из них. В зависимости от того, что вы тестируете, вы май Будьте лучше, тестируя импорт с отдельными вызовами интерпретатора, запустив каждый через, скажем, подпроцесс. Анкет Вероятно, это будет медленнее, но также, вероятно, более безопасным и более точным тестированием.
Другие советы
Использовать reload()
.
Перезагрузить ранее импортированный модуль. Аргумент должен быть объектом модуля, поэтому он должен был быть успешно импортирован ранее. Это полезно, если вы отредактировали исходный файл модуля с помощью внешнего редактора и хотите попробовать новую версию, не покидая интерпретатора Python. Возвращаемое значение - это объект модуля (такой же, как аргумент модуля).
Тем не менее, модуль должен быть уже загружен. Обходной путь - это справиться с полученным NameError
:
try:
reload(math)
except NameError:
import math
Напишите свой код в модулях с разными названием. Написание нового кода в существующий файл и попытка импортировать его снова не будет хорошо работать.
В качестве альтернативы, вы можете клоббер sys.modules
. Анкет Например:
class MyTestCase(unittest.TestCase):
def setUp(self):
# Record sys.modules here so we can restore it in tearDown.
self.old_modules = dict(sys.modules)
def tearDown(self):
# Remove any new modules imported during the test run. This lets us
# import the same source files for more than one test.
for m in [m for m in sys.modules if m not in self.old_modules]:
del sys.modules[m]
Столкнулся с подобной ситуацией. Позже обнаружил, что методика отступления в белом пространстве использовала вопросы. Особенно на платформах Windows убедитесь, что единая техника адаптирована по всему модулю, т.е. Используйте либо вкладку, либо вкладку исключительно.