Python 在解释器中重新加载(更新)模块文件
假设我有这个python脚本Python 在解释器中重新加载(更新)模块文件,python,module,Python,Module,假设我有这个python脚本script.py,我通过键入 import script 然后我通过键入以下内容来执行我的函数: script.testFunction(testArgument) 到目前为止还不错,但是当我更改script.py时,如果我再次尝试导入,脚本不会更新。我必须退出解释器,重新启动解释器,然后导入脚本的新版本,使其工作 我应该怎么做呢? 重新加载(模块) 重新加载以前导入的模块。这个论点必须是正确的 是一个模块对象,因此之前必须已成功导入。 如果已使用 外部编辑器,
script.py
,我通过键入
import script
然后我通过键入以下内容来执行我的函数:
script.testFunction(testArgument)
到目前为止还不错,但是当我更改script.py
时,如果我再次尝试导入,脚本不会更新。我必须退出解释器,重新启动解释器,然后导入脚本的新版本,使其工作
我应该怎么做呢?
重新加载(模块)
重新加载以前导入的模块。这个论点必须是正确的
是一个模块对象,因此之前必须已成功导入。
如果已使用
外部编辑器,并希望在不离开的情况下试用新版本
Python解释器。返回值是模块对象(
与模块参数相同)
您可以发出
重新加载脚本
,但该脚本不会更新现有对象,也不会深入其他模块
幸运的是,IPython
解决了这个问题,它是一个更好的python shell,支持自动重新加载。
要在IPython
中使用自动读取,您必须首先键入import ipy\u autoreload
,或者将其永久地放在~/.IPython/ipy\u user\u conf.py
中
然后运行:
%autoreload 1
表示在从提示符执行代码之前,将重新加载加载了%aimport
的每个模块。但是,这不会更新任何现有对象
有关您可以执行的更多有趣的操作,请参阅。另一个对我帮助很大的解决方案是维护
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
问题:嗯,我如何重新加载这个名为“脚本”的模块?回答:
重新加载(脚本)
+1对于Python!顺便说一句,我爱有人编辑了我的原始问题!!!英雄联盟您还可以执行%load\u ext autoreload
是的,它确实需要讽刺字体。我的感谢是真诚的。
>>> oldmods = set(sys.modules.keys())
>>> import script
>>> # Do stuff
>>> for mod in set(sys.modules.keys()).difference(oldmods): sys.modules.pop(mod)
>>> import script