假设我有这个python脚本script.py
并通过输入
import script
然后输入以下命令执行我的功能:
script.testFunction(testArgument)
确定到目前为止这么好,但是当我更改script.py
时,如果我再次尝试导入,则脚本不会更新。我必须退出解释器,重新启动解释器,然后导入新版本的脚本才能工作。
我该怎么办?
答案 0 :(得分:11)
您可以发出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了解更多有趣的事情。
答案 1 :(得分:7)
http://docs.python.org/library/functions.html#reload
重载(模块)的
重新加载以前导入的模块。论证必须 是一个模块对象,所以它必须先成功导入。 如果您使用a编辑了模块源文件,这将非常有用 外部编辑器,并希望不离开地试用新版本 Python解释器。返回值是模块对象( 与模块参数相同。)
答案 2 :(得分:1)
另一个对我有帮助的解决方案是维护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