Я знаю, как перезагрузить обычный модуль Python в рамках обычной сессии интерпретатора Python. Этот вопрос описывает, как это сделать довольно хорошо:
Как выгрузить (перезагрузить) модуль Python?
По какой-то причине у меня возникают проблемы с этим в сеансе интерпретатора Django "manage.py shell". Чтобы воссоздать мою проблему, запустите базовое руководство по Django, найденное здесь:
Написание вашего первого приложения Django, часть 1
После создания приложения "polls" и класса "Poll" запустите интерпретатор через "manage.py shell" и импортируйте в него приложение "polls".
import polls.models as pm
Создать новый объект "Опрос":
p = pm.Poll()
Пока все хорошо. Теперь вернитесь к своему источнику и добавьте любой произвольный метод или атрибут. Например, я добавил:
def x(self):
return 2+2
Теперь вернитесь к интерпретатору и «перезагрузите» модуль:
reload(pm)
Теперь попробуйте использовать ваш новый метод или атрибут:
p1 = pm.Poll()
p1.x()
Вы получите это сообщение:
'Poll' object has no attribute 'x'
Что дает? Я также попытался повторно запустить команду импорта, импортировать модуль, используя другой синтаксис, удалив все ссылки на любые объекты "Опрос" или на класс "Опрос". Я также пытался сделать это как с интерпретатором IPython, так и с простым интерпретатором Python (v2.6). Кажется, ничего не работает.
Использование тех же техник с произвольным модулем Python в обычной сессии интерпретатора работает отлично. Я просто не могу заставить его работать в сеансе «оболочки» Джанго.
Кстати, если это что-то меняет, я делаю это на машине с Ubuntu 9.04.