【发布时间】:2010-10-27 19:35:20
【问题描述】:
我知道如何在常规 Python 解释器会话中重新加载常规 Python 模块。这个问题记录了如何很好地做到这一点:
How do I unload (reload) a Python module?
出于某种原因,我在 Django 的“manage.py shell”解释器会话中遇到了麻烦。要重新创建我的问题,请启动此处的基本 Django 教程:
Writing your first Django app, part 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 模块使用相同的技术非常有效。我似乎无法让它在 Django 的“shell”会话中工作。
顺便说一句,如果有什么不同的话,我是在 Ubuntu 9.04 机器上执行此操作的。
【问题讨论】:
-
刚刚在 Windows 机器上运行相同的测试并得到相同的结果
-
是的,我都试过了,也在等待答案