【问题标题】:reload (update) a module file in the interpreter在解释器中重新加载(更新)模块文件
【发布时间】:2011-04-14 10:39:31
【问题描述】:

假设我有这个 python 脚本 script.py,我通过键入将其加载到解释器中

import script

然后我通过键入以下内容执行我的功能:

script.testFunction(testArgument)

到目前为止还不错,但是当我更改 script.py 时,如果我再次尝试导入,脚本不会更新。我必须退出解释器,重新启动解释器,然后导入新版本的脚本才能工作。

我应该怎么做?

【问题讨论】:

  • 问题:hhhhmmm,我将如何重新加载这个名为“脚本”的模块? 答案reload(script)。为 Python +1!
  • 顺便说一句,我爱有人编辑了我原来的问题!!!大声笑!

标签: python module


【解决方案1】:

您可以发出reload script,但这不会更新您现有的对象,也不会深入其他模块。

幸运的是,IPython 解决了这个问题 - 一个更好的支持自动重新加载的 python shell。

要在IPython 中使用自动重新加载,您必须先输入import ipy_autoreload,或者将其永久放入您的~/.ipython/ipy_user_conf.py

然后运行:

%autoreload 1
%aimport script

%autoreload 1 表示每个用%aimport 加载的模块将在从提示符执行代码之前重新加载。但是,这不会更新任何现有对象。

查看http://ipython.org/ipython-doc/dev/config/extensions/autoreload.html,了解更多有趣的事情。

【讨论】:

【解决方案2】:

http://docs.python.org/library/functions.html#reload

重新加载(模块)

重新加载以前导入的模块。论据必须 是一个模块对象,所以它必须之前已经成功导入。 如果您使用 外部编辑器,想在不离开的情况下试用新版本 Python 解释器。返回值是模块对象( 与模块参数相同)。

【讨论】:

  • 是的,它确实需要一个讽刺字体。我的感谢是真诚的。
【解决方案3】:

另一个对我有很大帮助的解决方案是维护sys.modules 键的副本并在导入后弹出新模块以强制重新导入深度导入:

>>> oldmods = set(sys.modules.keys())
>>> import script
>>> # Do stuff
>>> for mod in set(sys.modules.keys()).difference(oldmods): sys.modules.pop(mod)
>>> import script

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2012-05-11
    • 2016-03-26
    • 1970-01-01
    • 2013-06-25
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多