【发布时间】:2012-05-11 04:47:50
【问题描述】:
$ python
>>> import myapp
>>> reload(myapp)
<module 'myapp' from 'myapp.pyc'>
>>>
ctrl+D
$ python
>>> from myapp import *
>>> reload(myapp)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'myapp' is not defined
为什么会有不同的行为?使用from myapp import *时如何重新加载?
【问题讨论】:
-
我之所以使用 reload() 是因为我更改了模块的源代码并测试它以及我使用 from myapp import 的原因是因为它节省了我的打字时间。
-
reload要谨慎使用很多。它在许多方面表现出意外,其中最糟糕的是类存在于 VM 内的许多版本中,这取决于您是否有重新加载类的旧实例。出于这个原因,reload已从 Python 3 中删除。通常,设置一个小脚本来设置您需要的所有模块,然后使用import code; code.interact(local=locals())将其放入 shell 会容易得多。 Python 解释器启动得非常快,所以这通常比在 readline 历史记录中搜索reload更快。 -
@NiklasB。谢谢你的建议,但如果没有一些例子,我无法想象。如果可能并且您有时间写更多关于它的信息,请在答案中举一些例子。或者,如果您不反对,我可以根据您的评论创建一个新问题。
-
我的意思是pastie.org/3844991。您可以使用该脚本从头开始重新加载整个 shell,而不是打开 shell 并尝试重新加载内容(无法正常工作)。这还具有强制您显式设置要测试的上下文的优势,因此您可以重现您所做的一切,并可以选择稍后轻松地将其转换为单元测试。
-
@NiklasB 非常感谢,好主意。
标签: python interpreter reload