如何在 IDLE 中重新加载 Python 模块?
Posted
技术标签:
【中文标题】如何在 IDLE 中重新加载 Python 模块?【英文标题】:How to reload Python module in IDLE? 【发布时间】:2011-09-08 05:31:59 【问题描述】:我正在尝试了解我的工作流程如何使用 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 的相关问题,但没有一个答案对我有帮助。
【问题讨论】:
ctrl + f6
也会重新启动您的会话。
【参考方案1】:
你需要重做这一行:
>>> from greetings import *
做完之后
>>> reload(greetings)
只是重新加载模块不起作用的原因是因为 * 实际上导入了模块内的所有内容,因此您必须单独重新加载这些内容。如果您执行以下操作,它将按预期运行:
>>> import greetings
>>> greetings.hello()
hello!
更改文件
>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!
【讨论】:
【参考方案2】:这是我在尝试您的示例时得到的结果(来自新的 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
【讨论】:
我认为在他的示例中,他忽略了导入问候语和从问候语导入 * 的事实,因此上面的示例对他有效。在这种情况下,单独重新加载问候语不会导致对 hello() 的调用被更新,即使对 greetings.hello() 的调用可以正常工作。 @Jacinda 你可能是对的,我已经尝试了很多东西,并试图提炼出重要的行为。 @FarmBoy 这是我以前遇到过的错误。在我意识到发生了什么之后,我总是有一种“哦,duh”的感觉。【参考方案3】:IDLE 有一个菜单选择来运行当前文件。这将通过首先运行您的文件并重新加载它来重新启动 shell。
【讨论】:
或者你可以在文件编辑器(空闲)中按 f5 或使用 ctrl-f6。吨更容易【参考方案4】:在 Windows 上,我使用 shell->Restart shell 或 CTRL+F6 快捷键来重新启动并加载最新版本的模块
【讨论】:
以上是关于如何在 IDLE 中重新加载 Python 模块?的主要内容,如果未能解决你的问题,请参考以下文章