我知道如何在常规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
创建一个新的"Poll"对象:
p = pm.Poll()
到目前为止一切都很好.现在回到您的源代码,并添加任意的方法或属性.例如,我添加了:
def x(self):
return 2+2
现在返回到解释器并"重新加载"模块:
reload(pm)
现在try 使用您的新方法或属性:
p1 = pm.Poll()
p1.x()
您将收到以下消息:
'Poll' object has no attribute 'x'
怎么回事?我还try 重新运行导入命令,使用不同的语法导入模块,删除对任何"Poll"对象或"Poll"类的所有引用.我还在IPython解释器和普通Python(v2.6)解释器中try 了这一点.似乎什么都不管用.
在常规解释器会话中对任意Python模块使用相同的技术可以完美地工作.我就是不能让它在Django 的"shell"会话中工作.
顺便说一句,如果有什么不同的话,我是在Ubuntu 9.04机器上做的.