Проблема в том, что инструкции модуля импорта считывают модуль только один раз, даже если этот модуль изменился! Поэтому каждый раз, когда я что-то меняю в своем пакете, мне приходится выйти и перезапустить IPython. Больно.
Есть ли способ правильно принудительно перезагрузить некоторые модули? Или, лучше, каким-то образом запретить Python их кэшировать?
Я попробовал несколько подходов, но ни один из них не сработал. В частности, я сталкиваюсь с очень, очень странными ошибками, например, некоторые модули или переменные загадочным образом становятся равными None...
Единственный разумный ресурс, который я нашел, — это перезагрузка модулей Python из pyunit, но я его не проверял. Мне бы хотелось чего-то подобного.
Хорошей альтернативой было бы перезапуск IPython или каким-то образом перезапуск интерпретатора Python.
Итак, если вы разрабатываете на Python, какое решение вы нашли для этой проблемы?
Изменить
Чтобы прояснить ситуацию: очевидно, я понимаю, что некоторые старые переменные зависят от предыдущего состояния модуля может остаться. Меня это устраивает. Почему в Python так сложно принудительно перезагрузить модуль без каких-либо странных ошибок?
Более конкретно, если у меня весь модуль находится в одном файле Module.py, то следующее работает нормально:
Код: Выделить всё
import sys
try:
del sys.modules['module']
except AttributeError:
pass
import module
obj = module.my_class()
Однако всякий раз, когда мой модуль состоит из нескольких подмодулей, начинается ад:
Код: Выделить всё
import os
for mod in ['module.submod1', 'module.submod2']:
try:
del sys.module[mod]
except AttributeError:
pass
# sometimes this works, sometimes not. WHY?
Подробнее здесь: https://stackoverflow.com/questions/291 ... ed-modules
Мобильная версия