<p>按照要求,你能做的就是</p>
<pre><code>>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
</code></pre>
<p>如果直接使用用户模块,而不是执行<code>import *</code>(这几乎从来不是正确的方法),则会更好、更干净。那就是</p>
<pre><code>>>> from project.models import user
>>> reload(user)
</code></pre>
<p>你想怎么做就怎么做。但是,不太好。如果你真的需要经常重新加载模块,我不得不问:为什么?</p>
<p>我的怀疑(根据以前的经验,人们会问类似的问题)是你在测试你的模块。有很多方法可以测试一个模块,而在交互式解释器中手工测试是最糟糕的方法之一。将一个会话保存到文件中,并使用<a href="http://docs.python.org/library/doctest.html" rel="noreferrer">^{<cd2>}</a>快速修复。或者,将其作为程序编写并使用<code>python -i</code>。不过,唯一真正好的解决方案是使用<a href="http://docs.python.org/library/unittest.html" rel="noreferrer">^{<cd4>}</a>模块。</p>
<p>如果不是这样,希望是更好的,而不是更坏的。实际上,<code>reload</code>没有什么好用的(事实上,它在3.x中被删除了)。它不能有效地工作——您可能重新加载一个模块,但会留下以前版本的剩余部分。它甚至不能在所有类型的模块上工作——当重新加载时,扩展模块将不能正确地重新加载,有时甚至会严重崩溃。</p>
<p>在交互式解释器中使用它的上下文并没有留下很多选择,比如你在做什么,以及什么是真正的最佳解决方案。除此之外,有时人们使用<code>reload()</code>来实现插件等。这充其量是危险的,而且经常可以使用<code>exec</code>(我们发现自己身处的邪恶领域)或隔离进程来进行不同的操作。</p>