如何在IDLE中重新加载Python模块?

时间:2011-06-04 02:56:01

标签: python module reload python-idle

我正在努力了解我的工作流程如何与Python和IDLE一起使用。

假设我写了一个函数:

def hello():
    print 'hello!'

我将文件保存为greetings.py。然后在IDLE中,我测试函数:

>>> from greetings import *
>>> hello()
hello!

然后我改变了程序,并希望再次尝试hello()。所以我reload

>>> reload(greetings)
<module 'greetings' from '/path/to/file/greetings.py'>

然而,这种变化并未得到改善。我究竟做错了什么?如何重新加载更改的模块?

我一直在阅读有关SO的一些相关问题,但没有一个答案对我有帮助。

4 个答案:

答案 0 :(得分:12)

你需要重做这一行:

>>> from greetings import *

之后

>>> reload(greetings)

重新加载模块的原因不起作用是因为*实际上导入了模块内的所有内容,因此您必须单独重新加载它们。如果您执行了以下操作,它将按预期运行:

>>> import greetings
>>> greetings.hello()
hello!

更改文件

>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!

答案 1 :(得分:5)

这是我在尝试你的例子时得到的结果(来自一个新的Python交互式会话):

>>> from greetings import *
>>> reload(greetings)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'greetings' is not defined

这表明问题的根源。使用from greetings import *时,名称greetings不会导入全局命名空间。因此,您无法在其上使用reload(greetings)

要解决此问题,请尝试以下操作:

>>> import greetings
>>> greetings.hello()
hello
>>> reload(greetings)
<module 'greetings' from 'greetings.pyc'>
>>> greetings.hello()
hello world

答案 2 :(得分:1)

IDLE有一个菜单选择来运行当前文件。这将通过首先运行您的文件重新启动它来重新启动它。

答案 3 :(得分:0)

在Windows上,我使用shell-&gt;重新启动shell或CTRL + F6快捷方式重新启动并加载最新版本的模块