Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在解释器中重新加载(更新)模块文件_Python_Module - Fatal编程技术网

Python 在解释器中重新加载(更新)模块文件

Python 在解释器中重新加载(更新)模块文件,python,module,Python,Module,假设我有这个python脚本script.py,我通过键入 import script 然后我通过键入以下内容来执行我的函数: script.testFunction(testArgument) 到目前为止还不错,但是当我更改script.py时,如果我再次尝试导入,脚本不会更新。我必须退出解释器,重新启动解释器,然后导入脚本的新版本,使其工作 我应该怎么做呢? 重新加载(模块) 重新加载以前导入的模块。这个论点必须是正确的 是一个模块对象,因此之前必须已成功导入。 如果已使用 外部编辑器,

假设我有这个python脚本
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