Я знаю, как перезагрузить обычный модуль Python в рамках обычного сеанса интерпретатора Python. Этот вопрос документирует, как это сделать довольно хорошо:
Как выгрузить (перезагрузить) модуль Python?
По какой-то причине у меня возникают проблемы с этим в сеансе интерпретатора Django "manage.py shell". Чтобы воссоздать мою проблему, запустите базовый учебник Django, который можно найти здесь:
Написание первого приложения Django, часть 1
После создания приложения "опросы" и класса "Опрос" запустите интерпретатор через "manage.py shell" и импортируйте приложение "опросы" в него.
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 в регулярном сеансе интерпретатора отлично работает. Я просто не могу заставить его работать в сеансе Django "shell".
Кстати, если это имеет значение, я делаю это на машине Ubuntu 9.04.