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

问题描述

| 我试图了解我的工作流程如何与Python和IDLE一起使用。 假设我写了一个函数
def hello():
    print \'hello!\'
我将文件另存为“ 1”。然后在IDLE中,我测试功能
>>> from greetings import *
>>> hello()
hello!
然后我更改程序,并再次尝试
hello()
。所以我
reload
>>> reload(greetings)
<module \'greetings\' from \'/path/to/file/greetings.py\'>
然而,这种变化没有得到解决。我究竟做错了什么?如何重新加载已更改的模块? 我一直在阅读关于SO的许多相关问题,但是没有一个答案对我有帮助。     

解决方法

        您需要重做这一行:
>>> from greetings import *
你做完之后
>>> reload(greetings)
只是重新加载模块不起作用的原因是因为*实际上将所有内容导入了模块内部,因此您必须单独重新加载模块。如果您执行以下操作,它将按预期运行:
>>> import greetings
>>> greetings.hello()
hello!
更改文件
>>> reload(greetings)
<module \'greetings\' from \'greetings.py\'>
>>> greetings.hello()
world!
    ,        这是当我尝试您的示例时(从全新的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
    ,        IDLE有一个菜单选择来运行当前文件。这将通过首先运行文件并重新加载来重新启动外壳。     ,        在Windows上,我使用shell-> Restart shell或CTRL + F6快捷方式重新启动并加载最新版本的模式